firebase / firebase/firebase-functions-python
[Bug] stability_digest_payload_from_ce_payload fails with AttributeError: 'dict' object has no attribute 'split'
- Linguagem predominante
- Python
- Estrelas
- 167
- Forks
- 34
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
**Bug Description**
When using @crashlytics_fn.on_stability_digest_published(), the function fails with an AttributeError because digestDate is received as a dictionary (Firebase Timestamp object) instead of a string, but the SDK attempts to call .split() on it.
**Error Message**
AttributeError: 'dict' object has no attribute 'split'
**Full Stack Trace**
Exception on / [POST]
Traceback (most recent call last):
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/flask/app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/functions_framework/execution_id.py", line 157, in wrapper
result = view_function(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/functions_framework/__init__.py", line 188, in view_func
function(event)
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/firebase_functions/alerts/crashlytics_fn.py", line 293, in crashlytics_decorator_wrapped
func(crashlytics_event_from_ce(raw))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/firebase_functions/private/_alerts_fn.py", line 243, in crashlytics_event_from_ce
return event_from_ce_helper(raw, CrashlyticsEvent)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/firebase_functions/private/_alerts_fn.py", line 209, in event_from_ce_helper
"data": firebase_alert_data_from_ce(event_dict),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/firebase_functions/private/_alerts_fn.py", line 175, in firebase_alert_data_from_ce
alert_payload = stability_digest_payload_from_ce_payload(alert_payload)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/firebase_functions/private/_alerts_fn.py", line 136, in stability_digest_payload_from_ce_payload
digest_date=_util.timestamp_conversion(payload["digestDate"]),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/firebase_functions/private/util.py", line 407, in timestamp_conversion
precision_timestamp = get_precision_timestamp(time)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/layers/google.python.pip/pip/lib/python3.11/site-packages/firebase_functions/private/util.py", line 391, in get_precision_timestamp
_, s_fraction = time.split(".")
^^^^^^^^^^
AttributeError: 'dict' object has no attribute 'split'
**Environment**
firebase-functions version: 0.5.0 (also happens in 0.4.x)
firebase-admin version:7.1.0
Python version: 3.11
Deployment environment: Google Cloud Functions (2nd gen)
Guia de contribuição
Direção de pesquisa
Comece com stability_digest_payload_from_ce_payload em firebase_functions/private/_alerts_fn.py e siga sua chamada para timestamp_conversion em firebase_functions/private/util.py. Reproduza o evento de stability digest usando o digestDate em formato de dicionário mostrado no relatório e, em seguida, verifique se a conversão do evento é concluída sem o AttributeError e produz o timestamp esperado.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- firebase, python
- Domínio
- api, backend
- Tipo de issue
- Bug
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Status de atividade
- Pouca atividade
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 55/100