Skip to content

Commit bda8b95

Browse files
authored
feat: add support for setting user agent on event (#61)
1 parent a891420 commit bda8b95

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/amplitude/event.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ def get_body(self):
163163
"ingestion_metadata": ["ingestion_metadata", IngestionMetadata],
164164
"group_properties": ["group_properties", dict],
165165
"partner_id": ["partner_id", str],
166-
"version_name": ["version_name", str]
166+
"version_name": ["version_name", str],
167+
"user_agent": ["user_agent", str]
167168
}
168169

169170

@@ -209,6 +210,7 @@ class EventOptions:
209210
ingestion_metadata (IngestionMetadata, optional): Ingestion metadata.
210211
partner_id (str, optional): The partner id.
211212
version_name (str, optional): The version name.
213+
user_agent (str, optional): The user agent string.
212214
callback (callable, optional): Event level callback method. Triggered when event is sent or failed. Take three
213215
parameters: an event instance, an integer code of response status, an optional string message.
214216
@@ -256,6 +258,7 @@ def __init__(self, user_id: Optional[str] = None,
256258
ingestion_metadata: Optional[IngestionMetadata] = None,
257259
partner_id: Optional[str] = None,
258260
version_name: Optional[str] = None,
261+
user_agent: Optional[str] = None,
259262
callback=None):
260263
"""The constructor of EventOptions class"""
261264
self.user_id: Optional[str] = None
@@ -295,6 +298,7 @@ def __init__(self, user_id: Optional[str] = None,
295298
self.ingestion_metadata: Optional[IngestionMetadata] = None
296299
self.partner_id: Optional[str] = None
297300
self.version_name: Optional[str] = None
301+
self.user_agent: Optional[str] = None
298302
self["user_id"] = user_id
299303
self["device_id"] = device_id
300304
self["time"] = time
@@ -331,6 +335,7 @@ def __init__(self, user_id: Optional[str] = None,
331335
self["ingestion_metadata"] = ingestion_metadata
332336
self["partner_id"] = partner_id
333337
self["version_name"] = version_name
338+
self["user_agent"] = user_agent
334339
self.event_callback: Optional[Callable[[EventOptions, int, Optional[str]], None]] = callback
335340
self.__retry: int = 0
336341

@@ -455,6 +460,7 @@ class BaseEvent(EventOptions):
455460
plan (Plan, optional): Tracking plan properties.
456461
ingestion_metadata (IngestionMetadata, optional): Ingestion metadata.
457462
partner_id (str, optional): The partner id.
463+
user_agent (str, optional): The user agent string.
458464
callback (callable, optional): Event level callback method. Triggered when event is sent or failed. Take three
459465
parameters: an event instance, an integer code of response status, an optional string message.
460466
@@ -502,6 +508,7 @@ def __init__(self, event_type: str,
502508
plan: Optional[Plan] = None,
503509
ingestion_metadata: Optional[IngestionMetadata] = None,
504510
partner_id: Optional[str] = None,
511+
user_agent: Optional[str] = None,
505512
callback: Optional[Callable[[EventOptions, int, Optional[str]], None]] = None):
506513
"""The constructor of the BaseEvent class"""
507514
super().__init__(user_id=user_id,
@@ -539,6 +546,7 @@ def __init__(self, event_type: str,
539546
plan=plan,
540547
ingestion_metadata=ingestion_metadata,
541548
partner_id=partner_id,
549+
user_agent=user_agent,
542550
callback=callback)
543551
self.event_type: str = event_type
544552
self.event_properties: Optional[dict] = None
@@ -796,6 +804,7 @@ class GroupIdentifyEvent(BaseEvent):
796804
plan (Plan, optional): Tracking plan properties.
797805
ingestion_metadata (IngestionMetadata, optional): Ingestion metadata.
798806
partner_id (str, optional): The partner id.
807+
user_agent (str, optional): The user agent string.
799808
callback (callable, optional): Event level callback method. Triggered when event is sent or failed. Take three
800809
parameters: an event instance, an integer code of response status, an optional string message.
801810
identify_obj (Identify, optional): An Identify instance used to update the event's group_properties
@@ -839,6 +848,7 @@ def __init__(self, user_id: Optional[str] = None,
839848
plan: Optional[Plan] = None,
840849
ingestion_metadata: Optional[IngestionMetadata] = None,
841850
partner_id: Optional[str] = None,
851+
user_agent: Optional[str] = None,
842852
callback: Optional[Callable[[EventOptions, int, Optional[str]], None]] = None,
843853
identify_obj: Optional[Identify] = None):
844854
"""The constructor of GroupIdentifyEvent"""
@@ -880,6 +890,7 @@ def __init__(self, user_id: Optional[str] = None,
880890
plan=plan,
881891
ingestion_metadata=ingestion_metadata,
882892
partner_id=partner_id,
893+
user_agent=user_agent,
883894
callback=callback)
884895
if identify_obj:
885896
self.group_properties = identify_obj.user_properties
@@ -931,6 +942,7 @@ class IdentifyEvent(BaseEvent):
931942
plan (Plan, optional): Tracking plan properties.
932943
ingestion_metadata (IngestionMetadata, optional): Ingestion metadata.
933944
partner_id (str, optional): The partner id.
945+
user_agent (str, optional): The user agent string.
934946
callback (callable, optional): Event level callback method. Triggered when event is sent or failed. Take three
935947
parameters: an event instance, an integer code of response status, an optional string message.
936948
identify_obj (Identify, optional): An Identify instance used to update the event's user_properties
@@ -974,6 +986,7 @@ def __init__(self, user_id: Optional[str] = None,
974986
plan: Optional[Plan] = None,
975987
ingestion_metadata: Optional[IngestionMetadata] = None,
976988
partner_id: Optional[str] = None,
989+
user_agent: Optional[str] = None,
977990
callback: Optional[Callable[[EventOptions, int, Optional[str]], None]] = None,
978991
identify_obj: Optional[Identify] = None):
979992
super().__init__(constants.IDENTIFY_EVENT, user_id=user_id,
@@ -1014,6 +1027,7 @@ def __init__(self, user_id: Optional[str] = None,
10141027
plan=plan,
10151028
ingestion_metadata=ingestion_metadata,
10161029
partner_id=partner_id,
1030+
user_agent=user_agent,
10171031
callback=callback)
10181032
if identify_obj:
10191033
self.user_properties = identify_obj.user_properties
@@ -1157,6 +1171,7 @@ class RevenueEvent(BaseEvent):
11571171
plan (Plan, optional): Tracking plan properties.
11581172
ingestion_metadata (IngestionMetadata, optional): Ingestion metadata.
11591173
partner_id (str, optional): The partner id.
1174+
user_agent (str, optional): The user agent string.
11601175
callback (callable, optional): Event level callback method. Triggered when event is sent or failed. Take three
11611176
parameters: an event instance, an integer code of response status, an optional string message.
11621177
revenue_obj (Revenue, optional): An Revenue instance used to update the event's event_properties
@@ -1201,6 +1216,7 @@ def __init__(self, user_id: Optional[str] = None,
12011216
plan: Optional[Plan] = None,
12021217
ingestion_metadata: Optional[IngestionMetadata] = None,
12031218
partner_id: Optional[str] = None,
1219+
user_agent: Optional[str] = None,
12041220
callback: Optional[Callable[[EventOptions, int, Optional[str]], None]] = None,
12051221
revenue_obj: Optional[Revenue] = None):
12061222
"""The constructor of RevenueEvent class"""
@@ -1243,6 +1259,7 @@ def __init__(self, user_id: Optional[str] = None,
12431259
plan=plan,
12441260
ingestion_metadata=ingestion_metadata,
12451261
partner_id=partner_id,
1262+
user_agent=user_agent,
12461263
callback=callback)
12471264
if revenue_obj:
12481265
if not self.event_properties:

src/test/test_event.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,11 @@ def test_event_with_ingestion_metadata_equal_to_expect_event_body(self):
410410
self.assertTrue("ingestion_metadata" in event)
411411
self.assertEqual({"event_type": "test_event", "ingestion_metadata": expected}, event.get_event_body())
412412

413+
def test_event_user_agent(self):
414+
expected = "test_user_agent"
415+
event = BaseEvent("test_event", user_agent=expected)
416+
self.assertTrue("user_agent" in event)
417+
self.assertEqual({"event_type": "test_event", "user_agent": expected}, event.get_event_body())
413418

414419
if __name__ == '__main__':
415420
unittest.main()

0 commit comments

Comments
 (0)