Skip to content

Commit cdc6c98

Browse files
committed
refactor!: drop timestamp param from track_event / track_exposure_event
Only intended use case was back-filling events from other sources, which is overkill for now. EventProcessor always stamps datetime.now() at buffer time.
1 parent eff19a4 commit cdc6c98

4 files changed

Lines changed: 2 additions & 34 deletions

File tree

flagsmith/analytics.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ def track_event(
112112
value: typing.Optional[typing.Union[str, int, float]] = None,
113113
traits: typing.Optional[typing.Dict[str, typing.Any]] = None,
114114
metadata: typing.Optional[typing.Dict[str, typing.Any]] = None,
115-
timestamp: typing.Optional[datetime] = None,
116115
) -> None:
117116
self._buffer_event(
118117
event=event,
@@ -121,7 +120,6 @@ def track_event(
121120
value=value,
122121
traits=traits,
123122
metadata=metadata,
124-
timestamp=timestamp,
125123
)
126124

127125
def track_exposure_event(
@@ -131,7 +129,6 @@ def track_exposure_event(
131129
value: typing.Optional[str] = None,
132130
traits: typing.Optional[typing.Dict[str, typing.Any]] = None,
133131
metadata: typing.Optional[typing.Dict[str, typing.Any]] = None,
134-
timestamp: typing.Optional[datetime] = None,
135132
) -> None:
136133
self._buffer_event(
137134
event=FLAG_EXPOSURE_EVENT,
@@ -140,7 +137,6 @@ def track_exposure_event(
140137
value=value,
141138
traits=traits,
142139
metadata=metadata,
143-
timestamp=timestamp,
144140
)
145141

146142
def _buffer_event(
@@ -151,7 +147,6 @@ def _buffer_event(
151147
value: typing.Optional[typing.Union[str, int, float]],
152148
traits: typing.Optional[typing.Dict[str, typing.Any]],
153149
metadata: typing.Optional[typing.Dict[str, typing.Any]],
154-
timestamp: typing.Optional[datetime],
155150
) -> None:
156151
should_flush = False
157152
with self._lock:
@@ -163,7 +158,7 @@ def _buffer_event(
163158
"value": value,
164159
"traits": dict(traits) if traits else None,
165160
"metadata": {**(metadata or {}), "sdk_version": __version__},
166-
"timestamp": int((timestamp or datetime.now()).timestamp() * 1000),
161+
"timestamp": int(datetime.now().timestamp() * 1000),
167162
}
168163
)
169164
if len(self._buffer) >= self._max_buffer:

flagsmith/flagsmith.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,6 @@ def track_event(
377377
value: typing.Optional[typing.Union[str, int, float]] = None,
378378
traits: typing.Optional[TraitMapping] = None,
379379
metadata: typing.Optional[typing.Dict[str, typing.Any]] = None,
380-
timestamp: typing.Optional[datetime] = None,
381380
) -> None:
382381
if not self._event_processor:
383382
raise ValueError("Events must be enabled to track events.")
@@ -387,7 +386,6 @@ def track_event(
387386
value=value,
388387
traits=resolve_trait_values(traits),
389388
metadata=metadata,
390-
timestamp=timestamp,
391389
)
392390

393391
def track_exposure_event(
@@ -397,7 +395,6 @@ def track_exposure_event(
397395
value: typing.Optional[str] = None,
398396
traits: typing.Optional[TraitMapping] = None,
399397
metadata: typing.Optional[typing.Dict[str, typing.Any]] = None,
400-
timestamp: typing.Optional[datetime] = None,
401398
) -> None:
402399
if not self._event_processor:
403400
raise ValueError("Events must be enabled to track exposure events.")
@@ -407,7 +404,6 @@ def track_exposure_event(
407404
value=value,
408405
traits=resolve_trait_values(traits),
409406
metadata=metadata,
410-
timestamp=timestamp,
411407
)
412408

413409
def update_environment(self) -> None:

tests/test_event_processor.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22
from concurrent.futures import Future
3-
from datetime import datetime, timezone
3+
from datetime import datetime
44
from unittest import mock
55

66
from flagsmith.analytics import (
@@ -42,16 +42,6 @@ def test_track_event_defaults_timestamp_to_now(
4242
assert before <= event_processor._buffer[0]["timestamp"] <= after
4343

4444

45-
def test_track_event_uses_explicit_timestamp(
46-
event_processor: EventProcessor,
47-
) -> None:
48-
ts = datetime(2026, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
49-
50-
event_processor.track_event(event="ping", timestamp=ts)
51-
52-
assert event_processor._buffer[0]["timestamp"] == int(ts.timestamp() * 1000)
53-
54-
5545
def test_track_exposure_event_buffers_with_flag_exposure_event_name(
5646
event_processor: EventProcessor,
5747
) -> None:
@@ -74,16 +64,6 @@ def test_track_exposure_event_buffers_with_flag_exposure_event_name(
7464
assert "sdk_version" in event["metadata"]
7565

7666

77-
def test_track_exposure_event_uses_explicit_timestamp(
78-
event_processor: EventProcessor,
79-
) -> None:
80-
ts = datetime(2026, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
81-
82-
event_processor.track_exposure_event(feature_name="checkout_v2", timestamp=ts)
83-
84-
assert event_processor._buffer[0]["timestamp"] == int(ts.timestamp() * 1000)
85-
86-
8767
def test_auto_flush_on_buffer_full() -> None:
8868
config = EventProcessorConfig(events_api_url="http://test/", max_buffer_items=5)
8969
processor = EventProcessor(config=config, environment_key="key")

tests/test_flagsmith.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,7 +1003,6 @@ def test_track_event_delegates_to_event_processor(
10031003
value=99.5,
10041004
traits={"plan": "premium"},
10051005
metadata={"amount": 99},
1006-
timestamp=None,
10071006
)
10081007

10091008

@@ -1037,7 +1036,6 @@ def test_track_exposure_event_delegates_to_event_processor(
10371036
value="variant_b",
10381037
traits={"plan": "premium"},
10391038
metadata={"source": "homepage"},
1040-
timestamp=None,
10411039
)
10421040

10431041

@@ -1075,7 +1073,6 @@ def test_get_experiment_flag_returns_flag_and_tracks_exposure(
10751073
value="some-value",
10761074
traits={"plan": "premium"},
10771075
metadata=None,
1078-
timestamp=None,
10791076
)
10801077

10811078

0 commit comments

Comments
 (0)