Skip to content

Commit 299ae13

Browse files
authored
Merge pull request #80 from reddit/drop_variantless_expose_events
Return from `exposure()` if `variant_name` param not passed in
2 parents 5d16aa8 + 9ba1854 commit 299ae13

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

reddit_decider/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,9 @@ def expose(
388388
to :code:`events_logger` (keys must be part of v2 event schema,
389389
use dicts for nested fields) under :code:`inputs` and as :code:`kwargs`
390390
"""
391+
if variant_name is None or variant_name == "":
392+
return
393+
391394
decider = self._get_decider()
392395
if decider is None:
393396
return
@@ -859,12 +862,12 @@ def get_all_dynamic_configs(self) -> List[Dict[str, Any]]:
859862
return parsed_configs
860863

861864
def get_experiment(self, experiment_name: str) -> Optional[ExperimentConfig]:
862-
"""Get an :py:class:`~reddit_decider.ExperimentConfig` `dataclass <https://github.com/reddit/experiments.py/blob/728a9501faceab7072f9d62f4e391fa4c34a68b1/reddit_decider/__init__.py#L39-L47>`_
865+
"""Get an :py:class:`~reddit_decider.ExperimentConfig` `dataclass <https://github.com/reddit/experiments.py/blob/develop/reddit_decider/__init__.py#L44>`_
863866
representation of an experiment or :code:`None` if not found.
864867
865868
:param experiment_name: Name of the experiment to be fetched.
866869
867-
:return: an :py:class:`~reddit_decider.ExperimentConfig` `dataclass <https://github.com/reddit/experiments.py/blob/728a9501faceab7072f9d62f4e391fa4c34a68b1/reddit_decider/__init__.py#L39-L47>`_
870+
:return: an :py:class:`~reddit_decider.ExperimentConfig` `dataclass <https://github.com/reddit/experiments.py/blob/develop/reddit_decider/__init__.py#L44>`_
868871
representation of an experiment if found, else :code:`None`.
869872
"""
870873
decider = self._get_decider()

reddit_experiments/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,9 @@ def expose(
301301
:param kwargs: Additional arguments that will be passed to logger.
302302
303303
"""
304+
if variant_name is None or variant_name == "":
305+
return
306+
304307
experiment = self._get_experiment(experiment_name)
305308

306309
if experiment is None:

tests/decider_tests.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,17 @@ def test_expose(self):
749749
experiment_name="exp_1", variant=variant, event_fields=event_fields
750750
)
751751

752+
def test_expose_without_variant_name(self):
753+
with create_temp_config_file(self.exp_base_config) as f:
754+
decider = setup_decider(f.name, self.dc, self.mock_span, self.event_logger)
755+
756+
self.assertEqual(self.event_logger.log.call_count, 0)
757+
758+
decider.expose("exp_1", None)
759+
760+
# exposure assertions
761+
self.assertEqual(self.event_logger.log.call_count, 0)
762+
752763
def test_get_variant_for_identifier_without_expose_user_id(self):
753764
identifier = USER_ID
754765
bucket_val = "user_id"

tests/experiment_tests.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,38 @@ def test_exposure_event_fields_with_cfg_data(self):
259259
self.assertEqual(getattr(event_fields["experiment"], "owner"), "test_owner")
260260
self.assertEqual(getattr(event_fields["experiment"], "version"), "1")
261261

262+
def test_expose_without_variant_name(self):
263+
cfg_data = {
264+
"test": {
265+
"id": 1,
266+
"name": "test",
267+
"owner": "test_owner",
268+
"type": "r2",
269+
"version": "1",
270+
"start_ts": time.time() - THIRTY_DAYS,
271+
"stop_ts": time.time() + THIRTY_DAYS,
272+
"experiment": {
273+
"id": 1,
274+
"name": "test",
275+
"variants": {"active": 10, "control_1": 10, "control_2": 10},
276+
},
277+
}
278+
}
279+
experiments = Experiments(
280+
config_watcher=self.mock_filewatcher,
281+
server_span=self.mock_span,
282+
context_name="test",
283+
cfg_data=cfg_data,
284+
global_cache={},
285+
event_logger=self.event_logger,
286+
)
287+
288+
self.assertEqual(self.event_logger.log.call_count, 0)
289+
290+
experiments.expose("test", variant_name=None, user=self.user, app_name="r2")
291+
292+
self.assertEqual(self.event_logger.log.call_count, 0)
293+
262294
def test_that_override_true_has_no_effect_with_cfg_data(self):
263295
cfg_data = {
264296
"test": {

0 commit comments

Comments
 (0)