Skip to content

Commit e4096d9

Browse files
authored
Track function to return event_id (close snowplow#338)
PR snowplow#340 * track() returns event id * track_xxx()functions return tracker * Update tracker unit tests
1 parent f2c6b36 commit e4096d9

2 files changed

Lines changed: 58 additions & 58 deletions

File tree

snowplow_tracker/test/unit/test_tracker.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,12 +223,14 @@ def test_track(self) -> None:
223223

224224
t = Tracker("namespace", [e1, e2, e3])
225225

226-
p = Payload({"test": "track"})
227-
t.track(p)
226+
p = Payload({"eid": "event_id"})
227+
event_id = t.track(p)
228228

229-
e1.input.assert_called_once_with({"test": "track"})
230-
e2.input.assert_called_once_with({"test": "track"})
231-
e3.input.assert_called_once_with({"test": "track"})
229+
e1.input.assert_called_once_with({"eid": "event_id"})
230+
e2.input.assert_called_once_with({"eid": "event_id"})
231+
e3.input.assert_called_once_with({"eid": "event_id"})
232+
233+
self.assertEqual(event_id, "event_id")
232234

233235
@freeze_time("2021-04-19 00:00:01") # unix: 1618790401000
234236
@mock.patch("snowplow_tracker.Tracker.track")

snowplow_tracker/tracker.py

Lines changed: 51 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -122,25 +122,27 @@ def get_timestamp(tstamp: Optional[float] = None) -> int:
122122
Tracking methods
123123
"""
124124

125-
def track(self, pb: payload.Payload) -> "Tracker":
125+
def track(self, pb: payload.Payload) -> Optional[str]:
126126
"""
127-
Send the payload to a emitter
127+
Send the payload to a emitter. Returns the tracked event ID.
128128
129129
:param pb: Payload builder
130130
:type pb: payload
131-
:rtype: tracker
131+
:rtype: String
132132
"""
133133
for emitter in self.emitters:
134134
emitter.input(pb.nv_pairs)
135-
return self
135+
136+
if "eid" in pb.nv_pairs.keys():
137+
return pb.nv_pairs["eid"]
136138

137139
def complete_payload(
138140
self,
139141
pb: payload.Payload,
140142
context: Optional[List[SelfDescribingJson]],
141143
tstamp: Optional[float],
142144
event_subject: Optional[_subject.Subject],
143-
) -> "Tracker":
145+
) -> Optional[str]:
144146
"""
145147
Called by all tracking events to add the standard name-value pairs
146148
to the Payload object irrespective of the tracked event.
@@ -153,7 +155,7 @@ def complete_payload(
153155
:type tstamp: int | float | None
154156
:param event_subject: Optional per event subject
155157
:type event_subject: subject | None
156-
:rtype: tracker
158+
:rtype: String
157159
"""
158160
pb.add("eid", Tracker.get_uuid())
159161

@@ -199,7 +201,7 @@ def track_page_view(
199201
:type tstamp: int | float | None
200202
:param event_subject: Optional per event subject
201203
:type event_subject: subject | None
202-
:rtype: tracker
204+
:rtype: Tracker
203205
"""
204206
non_empty_string(page_url)
205207

@@ -209,7 +211,8 @@ def track_page_view(
209211
pb.add("page", page_title)
210212
pb.add("refr", referrer)
211213

212-
return self.complete_payload(pb, context, tstamp, event_subject)
214+
self.complete_payload(pb, context, tstamp, event_subject)
215+
return self
213216

214217
def track_page_ping(
215218
self,
@@ -245,7 +248,7 @@ def track_page_ping(
245248
:type tstamp: int | float | None
246249
:param event_subject: Optional per event subject
247250
:type event_subject: subject | None
248-
:rtype: tracker
251+
:rtype: Tracker
249252
"""
250253
non_empty_string(page_url)
251254

@@ -259,7 +262,8 @@ def track_page_ping(
259262
pb.add("pp_miy", min_y)
260263
pb.add("pp_may", max_y)
261264

262-
return self.complete_payload(pb, context, tstamp, event_subject)
265+
self.complete_payload(pb, context, tstamp, event_subject)
266+
return self
263267

264268
def track_link_click(
265269
self,
@@ -289,7 +293,7 @@ def track_link_click(
289293
:type tstamp: int | float | None
290294
:param event_subject: Optional per event subject
291295
:type event_subject: subject | None
292-
:rtype: tracker
296+
:rtype: Tracker
293297
"""
294298
non_empty_string(target_url)
295299

@@ -308,9 +312,8 @@ def track_link_click(
308312
"%s/link_click/%s/1-0-1" % (BASE_SCHEMA_PATH, SCHEMA_TAG), properties
309313
)
310314

311-
return self.track_self_describing_event(
312-
event_json, context, tstamp, event_subject
313-
)
315+
self.track_self_describing_event(event_json, context, tstamp, event_subject)
316+
return self
314317

315318
def track_add_to_cart(
316319
self,
@@ -343,7 +346,7 @@ def track_add_to_cart(
343346
:type tstamp: int | float | None
344347
:param event_subject: Optional per event subject
345348
:type event_subject: subject | None
346-
:rtype: tracker
349+
:rtype: Tracker
347350
"""
348351
warn(
349352
"track_add_to_cart will be deprecated in future versions.",
@@ -368,9 +371,8 @@ def track_add_to_cart(
368371
"%s/add_to_cart/%s/1-0-0" % (BASE_SCHEMA_PATH, SCHEMA_TAG), properties
369372
)
370373

371-
return self.track_self_describing_event(
372-
event_json, context, tstamp, event_subject
373-
)
374+
self.track_self_describing_event(event_json, context, tstamp, event_subject)
375+
return self
374376

375377
def track_remove_from_cart(
376378
self,
@@ -403,7 +405,7 @@ def track_remove_from_cart(
403405
:type tstamp: int | float | None
404406
:param event_subject: Optional per event subject
405407
:type event_subject: subject | None
406-
:rtype: tracker
408+
:rtype: Tracker
407409
"""
408410
warn(
409411
"track_remove_from_cart will be deprecated in future versions.",
@@ -428,9 +430,8 @@ def track_remove_from_cart(
428430
"%s/remove_from_cart/%s/1-0-0" % (BASE_SCHEMA_PATH, SCHEMA_TAG), properties
429431
)
430432

431-
return self.track_self_describing_event(
432-
event_json, context, tstamp, event_subject
433-
)
433+
self.track_self_describing_event(event_json, context, tstamp, event_subject)
434+
return self
434435

435436
def track_form_change(
436437
self,
@@ -463,7 +464,7 @@ def track_form_change(
463464
:type tstamp: int | float | None
464465
:param event_subject: Optional per event subject
465466
:type event_subject: subject | None
466-
:rtype: tracker
467+
:rtype: Tracker
467468
"""
468469
non_empty_string(form_id)
469470
one_of(node_name, FORM_NODE_NAMES)
@@ -484,9 +485,8 @@ def track_form_change(
484485
"%s/change_form/%s/1-0-0" % (BASE_SCHEMA_PATH, SCHEMA_TAG), properties
485486
)
486487

487-
return self.track_self_describing_event(
488-
event_json, context, tstamp, event_subject
489-
)
488+
self.track_self_describing_event(event_json, context, tstamp, event_subject)
489+
return self
490490

491491
def track_form_submit(
492492
self,
@@ -510,7 +510,7 @@ def track_form_submit(
510510
:type tstamp: int | float | None
511511
:param event_subject: Optional per event subject
512512
:type event_subject: subject | None
513-
:rtype: tracker
513+
:rtype: Tracker
514514
"""
515515
non_empty_string(form_id)
516516
for element in elements or []:
@@ -527,9 +527,8 @@ def track_form_submit(
527527
"%s/submit_form/%s/1-0-0" % (BASE_SCHEMA_PATH, SCHEMA_TAG), properties
528528
)
529529

530-
return self.track_self_describing_event(
531-
event_json, context, tstamp, event_subject
532-
)
530+
self.track_self_describing_event(event_json, context, tstamp, event_subject)
531+
return self
533532

534533
def track_site_search(
535534
self,
@@ -556,7 +555,7 @@ def track_site_search(
556555
:type tstamp: int | float | None
557556
:param event_subject: Optional per event subject
558557
:type event_subject: subject | None
559-
:rtype: tracker
558+
:rtype: Tracker
560559
"""
561560
non_empty(terms)
562561

@@ -573,9 +572,8 @@ def track_site_search(
573572
"%s/site_search/%s/1-0-0" % (BASE_SCHEMA_PATH, SCHEMA_TAG), properties
574573
)
575574

576-
return self.track_self_describing_event(
577-
event_json, context, tstamp, event_subject
578-
)
575+
self.track_self_describing_event(event_json, context, tstamp, event_subject)
576+
return self
579577

580578
def track_ecommerce_transaction_item(
581579
self,
@@ -614,7 +612,7 @@ def track_ecommerce_transaction_item(
614612
:type tstamp: int | float | None
615613
:param event_subject: Optional per event subject
616614
:type event_subject: subject | None
617-
:rtype: tracker
615+
:rtype: Tracker
618616
"""
619617
warn(
620618
"track_ecommerce_transaction_item will be deprecated in future versions.",
@@ -634,7 +632,8 @@ def track_ecommerce_transaction_item(
634632
pb.add("ti_qu", quantity)
635633
pb.add("ti_cu", currency)
636634

637-
return self.complete_payload(pb, context, tstamp, event_subject)
635+
self.complete_payload(pb, context, tstamp, event_subject)
636+
return self
638637

639638
def track_ecommerce_transaction(
640639
self,
@@ -679,7 +678,7 @@ def track_ecommerce_transaction(
679678
:type tstamp: int | float | None
680679
:param event_subject: Optional per event subject
681680
:type event_subject: subject | None
682-
:rtype: tracker
681+
:rtype: Tracker
683682
"""
684683
warn(
685684
"track_ecommerce_transaction will be deprecated in future versions.",
@@ -734,7 +733,7 @@ def track_screen_view(
734733
:type tstamp: int | float | None
735734
:param event_subject: Optional per event subject
736735
:type event_subject: subject | None
737-
:rtype: tracker
736+
:rtype: Tracker
738737
"""
739738
warn(
740739
"track_screen_view will be deprecated in future versions. Please use track_mobile_screen_view.",
@@ -752,9 +751,8 @@ def track_screen_view(
752751
screen_view_properties,
753752
)
754753

755-
return self.track_self_describing_event(
756-
event_json, context, tstamp, event_subject
757-
)
754+
self.track_self_describing_event(event_json, context, tstamp, event_subject)
755+
return self
758756

759757
def track_mobile_screen_view(
760758
self,
@@ -790,7 +788,7 @@ def track_mobile_screen_view(
790788
:type tstamp: int | float | None
791789
:param event_subject: Optional per event subject
792790
:type event_subject: subject | None
793-
:rtype: tracker
791+
:rtype: Tracker
794792
"""
795793
screen_view_properties = {}
796794

@@ -816,9 +814,8 @@ def track_mobile_screen_view(
816814
"%s/screen_view/%s/1-0-0" % (MOBILE_SCHEMA_PATH, SCHEMA_TAG),
817815
screen_view_properties,
818816
)
819-
return self.track_self_describing_event(
820-
event_json, context, tstamp, event_subject
821-
)
817+
self.track_self_describing_event(event_json, context, tstamp, event_subject)
818+
return self
822819

823820
def track_struct_event(
824821
self,
@@ -850,7 +847,7 @@ def track_struct_event(
850847
:type tstamp: int | float | None
851848
:param event_subject: Optional per event subject
852849
:type event_subject: subject | None
853-
:rtype: tracker
850+
:rtype: Tracker
854851
"""
855852
non_empty_string(category)
856853
non_empty_string(action)
@@ -863,7 +860,8 @@ def track_struct_event(
863860
pb.add("se_pr", property_)
864861
pb.add("se_va", value)
865862

866-
return self.complete_payload(pb, context, tstamp, event_subject)
863+
self.complete_payload(pb, context, tstamp, event_subject)
864+
return self
867865

868866
def track_self_describing_event(
869867
self,
@@ -883,7 +881,7 @@ def track_self_describing_event(
883881
:type tstamp: int | float | None
884882
:param event_subject: Optional per event subject
885883
:type event_subject: subject | None
886-
:rtype: tracker
884+
:rtype: Tracker
887885
"""
888886

889887
envelope = SelfDescribingJson(
@@ -895,7 +893,8 @@ def track_self_describing_event(
895893
pb.add("e", "ue")
896894
pb.add_json(envelope, self.encode_base64, "ue_px", "ue_pr", self.json_encoder)
897895

898-
return self.complete_payload(pb, context, tstamp, event_subject)
896+
self.complete_payload(pb, context, tstamp, event_subject)
897+
return self
899898

900899
# Alias
901900
def track_unstruct_event(
@@ -916,16 +915,15 @@ def track_unstruct_event(
916915
:type tstamp: int | float | None
917916
:param event_subject: Optional per event subject
918917
:type event_subject: subject | None
919-
:rtype: tracker
918+
:rtype: Tracker
920919
"""
921920
warn(
922921
"track_unstruct_event will be deprecated in future versions. Please use track_self_describing_event.",
923922
DeprecationWarning,
924923
stacklevel=2,
925924
)
926-
return self.track_self_describing_event(
927-
event_json, context, tstamp, event_subject
928-
)
925+
self.track_self_describing_event(event_json, context, tstamp, event_subject)
926+
return self
929927

930928
def flush(self, is_async: bool = False) -> "Tracker":
931929
"""

0 commit comments

Comments
 (0)