Skip to content

Commit ec24259

Browse files
authored
Support custom UUID values (#53)
* feat(uuid): add support for custom uuids * fix deprecated assert * do not send "none" uuid * you can have it in any color you want, as long as it's black
1 parent 90fa0a0 commit ec24259

File tree

4 files changed

+69
-53
lines changed

4 files changed

+69
-53
lines changed

posthog/__init__.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def capture(
2525
properties=None, # type: Optional[Dict]
2626
context=None, # type: Optional[Dict]
2727
timestamp=None, # type: Optional[datetime.datetime]
28-
message_id=None, # type: Optional[str]
28+
uuid=None, # type: Optional[str]
2929
groups=None, # type: Optional[Dict]
3030
):
3131
# type: (...) -> None
@@ -56,7 +56,7 @@ def capture(
5656
properties=properties,
5757
context=context,
5858
timestamp=timestamp,
59-
message_id=message_id,
59+
uuid=uuid,
6060
groups=groups,
6161
)
6262

@@ -66,7 +66,7 @@ def identify(
6666
properties=None, # type: Optional[Dict]
6767
context=None, # type: Optional[Dict]
6868
timestamp=None, # type: Optional[datetime.datetime]
69-
message_id=None, # type: Optional[str]
69+
uuid=None, # type: Optional[str]
7070
):
7171
# type: (...) -> None
7272
"""
@@ -90,7 +90,7 @@ def identify(
9090
properties=properties,
9191
context=context,
9292
timestamp=timestamp,
93-
message_id=message_id,
93+
uuid=uuid,
9494
)
9595

9696

@@ -99,7 +99,7 @@ def set(
9999
properties=None, # type: Optional[Dict]
100100
context=None, # type: Optional[Dict]
101101
timestamp=None, # type: Optional[datetime.datetime]
102-
message_id=None, # type: Optional[str]
102+
uuid=None, # type: Optional[str]
103103
):
104104
# type: (...) -> None
105105
"""
@@ -123,7 +123,7 @@ def set(
123123
properties=properties,
124124
context=context,
125125
timestamp=timestamp,
126-
message_id=message_id,
126+
uuid=uuid,
127127
)
128128

129129

@@ -132,7 +132,7 @@ def set_once(
132132
properties=None, # type: Optional[Dict]
133133
context=None, # type: Optional[Dict]
134134
timestamp=None, # type: Optional[datetime.datetime]
135-
message_id=None, # type: Optional[str]
135+
uuid=None, # type: Optional[str]
136136
):
137137
# type: (...) -> None
138138
"""
@@ -156,7 +156,7 @@ def set_once(
156156
properties=properties,
157157
context=context,
158158
timestamp=timestamp,
159-
message_id=message_id,
159+
uuid=uuid,
160160
)
161161

162162

@@ -166,7 +166,7 @@ def group_identify(
166166
properties=None, # type: Optional[Dict]
167167
context=None, # type: Optional[Dict]
168168
timestamp=None, # type: Optional[datetime.datetime]
169-
message_id=None, # type: Optional[str]
169+
uuid=None, # type: Optional[str]
170170
):
171171
# type: (...) -> None
172172
"""
@@ -191,7 +191,7 @@ def group_identify(
191191
properties=properties,
192192
context=context,
193193
timestamp=timestamp,
194-
message_id=message_id,
194+
uuid=uuid,
195195
)
196196

197197

@@ -200,7 +200,7 @@ def alias(
200200
distinct_id, # type: str,
201201
context=None, # type: Optional[Dict]
202202
timestamp=None, # type: Optional[datetime.datetime]
203-
message_id=None, # type: Optional[str]
203+
uuid=None, # type: Optional[str]
204204
):
205205
# type: (...) -> None
206206
"""
@@ -225,7 +225,7 @@ def alias(
225225
distinct_id=distinct_id,
226226
context=context,
227227
timestamp=timestamp,
228-
message_id=message_id,
228+
uuid=uuid,
229229
)
230230

231231

posthog/client.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def __init__(
103103
if send:
104104
consumer.start()
105105

106-
def identify(self, distinct_id=None, properties=None, context=None, timestamp=None, message_id=None):
106+
def identify(self, distinct_id=None, properties=None, context=None, timestamp=None, uuid=None):
107107
properties = properties or {}
108108
context = context or {}
109109
require("distinct_id", distinct_id, ID_TYPES)
@@ -115,13 +115,13 @@ def identify(self, distinct_id=None, properties=None, context=None, timestamp=No
115115
"distinct_id": distinct_id,
116116
"$set": properties,
117117
"event": "$identify",
118-
"messageId": message_id,
118+
"uuid": uuid,
119119
}
120120

121121
return self._enqueue(msg)
122122

123123
def capture(
124-
self, distinct_id=None, event=None, properties=None, context=None, timestamp=None, message_id=None, groups=None
124+
self, distinct_id=None, event=None, properties=None, context=None, timestamp=None, uuid=None, groups=None
125125
):
126126
properties = properties or {}
127127
context = context or {}
@@ -135,7 +135,7 @@ def capture(
135135
"context": context,
136136
"distinct_id": distinct_id,
137137
"event": event,
138-
"messageId": message_id,
138+
"uuid": uuid,
139139
}
140140

141141
if groups:
@@ -144,7 +144,7 @@ def capture(
144144

145145
return self._enqueue(msg)
146146

147-
def set(self, distinct_id=None, properties=None, context=None, timestamp=None, message_id=None):
147+
def set(self, distinct_id=None, properties=None, context=None, timestamp=None, uuid=None):
148148
properties = properties or {}
149149
context = context or {}
150150
require("distinct_id", distinct_id, ID_TYPES)
@@ -156,12 +156,12 @@ def set(self, distinct_id=None, properties=None, context=None, timestamp=None, m
156156
"distinct_id": distinct_id,
157157
"$set": properties,
158158
"event": "$set",
159-
"messageId": message_id,
159+
"uuid": uuid,
160160
}
161161

162162
return self._enqueue(msg)
163163

164-
def set_once(self, distinct_id=None, properties=None, context=None, timestamp=None, message_id=None):
164+
def set_once(self, distinct_id=None, properties=None, context=None, timestamp=None, uuid=None):
165165
properties = properties or {}
166166
context = context or {}
167167
require("distinct_id", distinct_id, ID_TYPES)
@@ -173,14 +173,12 @@ def set_once(self, distinct_id=None, properties=None, context=None, timestamp=No
173173
"distinct_id": distinct_id,
174174
"$set_once": properties,
175175
"event": "$set_once",
176-
"messageId": message_id,
176+
"uuid": uuid,
177177
}
178178

179179
return self._enqueue(msg)
180180

181-
def group_identify(
182-
self, group_type=None, group_key=None, properties=None, context=None, timestamp=None, message_id=None
183-
):
181+
def group_identify(self, group_type=None, group_key=None, properties=None, context=None, timestamp=None, uuid=None):
184182
properties = properties or {}
185183
context = context or {}
186184
require("group_type", group_type, ID_TYPES)
@@ -197,12 +195,12 @@ def group_identify(
197195
"distinct_id": "${}_{}".format(group_type, group_key),
198196
"timestamp": timestamp,
199197
"context": context,
200-
"messageId": message_id,
198+
"uuid": uuid,
201199
}
202200

203201
return self._enqueue(msg)
204202

205-
def alias(self, previous_id=None, distinct_id=None, context=None, timestamp=None, message_id=None):
203+
def alias(self, previous_id=None, distinct_id=None, context=None, timestamp=None, uuid=None):
206204
context = context or {}
207205

208206
require("previous_id", previous_id, ID_TYPES)
@@ -221,7 +219,7 @@ def alias(self, previous_id=None, distinct_id=None, context=None, timestamp=None
221219

222220
return self._enqueue(msg)
223221

224-
def page(self, distinct_id=None, url=None, properties=None, context=None, timestamp=None, message_id=None):
222+
def page(self, distinct_id=None, url=None, properties=None, context=None, timestamp=None, uuid=None):
225223
properties = properties or {}
226224
context = context or {}
227225

@@ -237,7 +235,7 @@ def page(self, distinct_id=None, url=None, properties=None, context=None, timest
237235
"timestamp": timestamp,
238236
"context": context,
239237
"distinct_id": distinct_id,
240-
"messageId": message_id,
238+
"uuid": uuid,
241239
}
242240

243241
return self._enqueue(msg)
@@ -247,17 +245,20 @@ def _enqueue(self, msg):
247245
timestamp = msg["timestamp"]
248246
if timestamp is None:
249247
timestamp = datetime.utcnow().replace(tzinfo=tzutc())
250-
message_id = msg.get("messageId")
251-
if message_id is None:
252-
message_id = uuid4()
253248

254249
require("timestamp", timestamp, datetime)
255250
require("context", msg["context"], dict)
256251

257252
# add common
258253
timestamp = guess_timezone(timestamp)
259254
msg["timestamp"] = timestamp.isoformat()
260-
msg["messageId"] = stringify_id(message_id)
255+
256+
# only send if "uuid" is truthy
257+
if "uuid" in msg:
258+
uuid = msg.pop("uuid")
259+
if uuid:
260+
msg["uuid"] = stringify_id(uuid)
261+
261262
if not msg.get("properties"):
262263
msg["properties"] = {}
263264
msg["properties"]["$lib"] = "posthog-python"

0 commit comments

Comments
 (0)