Skip to content

Commit 9139981

Browse files
committed
fix: Exposure events sent without an identifier
An exposure without an identifier cannot be reconciled with conversion events. track_exposure_event now skips these and logs a warning. beep boop
1 parent a0f55dc commit 9139981

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

flagsmith/flagsmith.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,14 @@ def track_exposure_event(
437437
) -> None:
438438
if not self._event_processor:
439439
raise ValueError("Events must be enabled to track exposure events.")
440+
if not identifier:
441+
logger.warning(
442+
"Not sending %s for feature %s: an exposure requires an"
443+
" identifier to reconcile with conversion events.",
444+
FLAG_EXPOSURE_EVENT,
445+
feature_name,
446+
)
447+
return
440448
self._event_processor.track_exposure_event(
441449
feature_name=feature_name,
442450
identifier=identifier,

tests/test_flagsmith.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,6 +1021,27 @@ def test_track_exposure_event_raises_without_config(api_key: str) -> None:
10211021
flagsmith.track_exposure_event("checkout_v2")
10221022

10231023

1024+
def test_track_exposure_event__no_identifier__exposure_not_sent(
1025+
mocker: MockerFixture,
1026+
api_key: str,
1027+
caplog: pytest.LogCaptureFixture,
1028+
) -> None:
1029+
# Given
1030+
config = EventProcessorConfig(events_api_url="http://test/")
1031+
flagsmith = Flagsmith(
1032+
environment_key=api_key, enable_events=True, event_processor_config=config
1033+
)
1034+
1035+
mock_track = mocker.patch.object(flagsmith._event_processor, "track_exposure_event")
1036+
1037+
# When
1038+
flagsmith.track_exposure_event("checkout_v2", value="variant_b")
1039+
1040+
# Then
1041+
mock_track.assert_not_called()
1042+
assert "an exposure requires an identifier" in caplog.text
1043+
1044+
10241045
def test_track_exposure_event_delegates_to_event_processor(
10251046
mocker: MockerFixture, api_key: str
10261047
) -> None:

0 commit comments

Comments
 (0)