Skip to content

Commit d6ea227

Browse files
committed
refactor: split firestore_event_data into proto_event_data and domain_event_data
1 parent bf48bca commit d6ea227

1 file changed

Lines changed: 21 additions & 28 deletions

File tree

src/firebase_functions/firestore_fn.py

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,12 @@ def _firestore_endpoint_handler(
113113
) -> None:
114114
event_attributes = raw._get_attributes()
115115
event_data: _typing.Any = raw.get_data()
116-
firestore_event_data: _firestore.DocumentEventData
116+
proto_event_data: _firestore.DocumentEventData
117117
content_type: str = event_attributes["datacontenttype"]
118118
if "application/json" in content_type or isinstance(event_data, dict):
119-
firestore_event_data = _typing.cast(
120-
_firestore.DocumentEventData, _firestore.DocumentEventData.from_json(event_data)
121-
)
119+
proto_event_data = _firestore.DocumentEventData.from_json(event_data)
122120
elif "application/protobuf" in content_type or isinstance(event_data, bytes):
123-
firestore_event_data = _typing.cast(
124-
_firestore.DocumentEventData, _firestore.DocumentEventData.deserialize(event_data)
125-
)
121+
proto_event_data = _firestore.DocumentEventData.deserialize(event_data)
126122
else:
127123
actual_type = type(event_data)
128124
raise TypeError(
@@ -147,47 +143,45 @@ def _firestore_endpoint_handler(
147143
value_snapshot: DocumentSnapshot | None = None
148144
old_value_snapshot: DocumentSnapshot | None = None
149145

150-
if firestore_event_data.value:
146+
if proto_event_data.value:
151147
document_dict = _firestore_helpers.decode_dict(
152-
firestore_event_data.value.fields, firestore_client
148+
proto_event_data.value.fields, firestore_client
153149
)
154150
value_snapshot = _firestore_v1.DocumentSnapshot(
155151
firestore_ref,
156152
document_dict,
157153
True,
158154
_datetime_to_pb_timestamp(event_time),
159-
firestore_event_data.value.create_time,
160-
firestore_event_data.value.update_time,
155+
proto_event_data.value.create_time,
156+
proto_event_data.value.update_time,
161157
)
162-
if firestore_event_data.old_value:
158+
if proto_event_data.old_value:
163159
document_dict = _firestore_helpers.decode_dict(
164-
firestore_event_data.old_value.fields, firestore_client
160+
proto_event_data.old_value.fields, firestore_client
165161
)
166162
old_value_snapshot = _firestore_v1.DocumentSnapshot(
167163
firestore_ref,
168164
document_dict,
169165
True,
170166
_datetime_to_pb_timestamp(event_time),
171-
firestore_event_data.old_value.create_time,
172-
firestore_event_data.old_value.update_time,
167+
proto_event_data.old_value.create_time,
168+
proto_event_data.old_value.update_time,
173169
)
174170

171+
domain_event_data: DocumentSnapshot | Change[DocumentSnapshot | None] | None
175172
if event_type in (_event_type_deleted, _event_type_deleted_with_auth_context):
176-
firestore_event_data = _typing.cast(_firestore.DocumentEventData, old_value_snapshot)
177-
if event_type in (_event_type_created, _event_type_created_with_auth_context):
178-
firestore_event_data = _typing.cast(_firestore.DocumentEventData, value_snapshot)
179-
if event_type in (
173+
domain_event_data = old_value_snapshot
174+
elif event_type in (_event_type_created, _event_type_created_with_auth_context):
175+
domain_event_data = value_snapshot
176+
elif event_type in (
180177
_event_type_written,
181178
_event_type_updated,
182179
_event_type_written_with_auth_context,
183180
_event_type_updated_with_auth_context,
184181
):
185-
firestore_event_data = _typing.cast(
186-
_firestore.DocumentEventData,
187-
Change(
188-
before=old_value_snapshot,
189-
after=value_snapshot,
190-
),
182+
domain_event_data = Change(
183+
before=old_value_snapshot,
184+
after=value_snapshot,
191185
)
192186

193187
params: dict[str, str] = {
@@ -205,7 +199,7 @@ def _firestore_endpoint_handler(
205199
source=event_attributes["source"],
206200
type=event_attributes["type"],
207201
time=event_time,
208-
data=firestore_event_data,
202+
data=domain_event_data,
209203
subject=event_attributes["subject"],
210204
params=params,
211205
)
@@ -220,8 +214,7 @@ def _firestore_endpoint_handler(
220214
)
221215
func(database_event_with_auth_context)
222216
else:
223-
# mypy cannot infer that the event type is correct, hence the cast
224-
_typing.cast(_C1 | _C2, func)(database_event) # type: ignore[arg-type]
217+
func(database_event)
225218

226219

227220
@_util.copy_func_kwargs(FirestoreOptions)

0 commit comments

Comments
 (0)