Skip to content

Commit 171b5fe

Browse files
authored
Merge pull request #90 from reddit/get_exp_metrics
Update `get_experiment()` to use decider shim & remove last decider bindings usage
2 parents 02a4572 + 47c39fd commit 171b5fe

File tree

4 files changed

+35
-48
lines changed

4 files changed

+35
-48
lines changed

docs/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ docutils==0.16
44
Jinja2==2.11.2
55
MarkupSafe==1.1.1
66
pydocstyle==5.1.1
7-
reddit-decider==1.2.30
7+
reddit-decider==1.2.31
88
reddit-edgecontext==1.0.0a3
99
Sphinx==3.4.0
1010
sphinx-autodoc-typehints==1.11.1

reddit_decider/__init__.py

Lines changed: 32 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
from rust_decider import DeciderException
2929
from rust_decider import Decision
3030
from rust_decider import FeatureNotFoundException
31-
from rust_decider import make_ctx
3231
from rust_decider import ValueTypeMismatchException
3332
from typing_extensions import Literal
3433

@@ -187,16 +186,6 @@ def __init__(
187186
else:
188187
self._event_logger = DebugLogger()
189188

190-
def _get_decider(self) -> Optional[T]:
191-
if self._internal is not None:
192-
return self._internal.get_decider()
193-
194-
return None
195-
196-
def _get_ctx(self) -> Any:
197-
context_fields = self._decider_context.to_dict()
198-
return make_ctx(context_fields)
199-
200189
def _send_expose(self, event: str, exposure_fields: dict) -> None:
201190
event_fields = deepcopy(exposure_fields)
202191
try:
@@ -379,30 +368,31 @@ def expose(
379368
if variant_name is None or variant_name == "":
380369
return
381370

382-
decider = self._get_decider()
383-
if decider is None:
371+
if self._internal is None:
372+
logger.error("RustDecider is None--did not initialize.")
384373
return
385374

386-
experiment = decider.get_experiment(experiment_name)
387-
error = experiment.err()
388-
if error:
389-
logger.warning(f"Encountered error in decider.get_experiment(): {error}")
375+
try:
376+
feature = self._internal.get_feature(experiment_name)
377+
except FeatureNotFoundException as exc:
378+
warnings.warn(str(exc))
379+
return
380+
except DeciderException as exc:
381+
logger.info(str(exc))
390382
return
391383

392384
event_context_fields = self._decider_context.to_event_dict()
393385
event_context_fields.update(exposure_kwargs or {})
394386
event_fields = deepcopy(event_context_fields)
395387

396-
exp_dict = experiment.val()
397-
398388
experiment = ExperimentConfig(
399-
id=int(exp_dict.get("id", 0)),
400-
name=exp_dict.get("name"),
401-
version=str(exp_dict.get("version")),
402-
bucket_val=exp_dict.get("variant_set", {}).get("bucket_val"),
403-
start_ts=exp_dict.get("variant_set", {}).get("start_ts"),
404-
stop_ts=exp_dict.get("variant_set", {}).get("stop_ts"),
405-
owner=exp_dict.get("owner"),
389+
id=feature.id,
390+
name=feature.name,
391+
version=str(feature.version),
392+
bucket_val=feature.bucket_val,
393+
start_ts=feature.start_ts,
394+
stop_ts=feature.stop_ts,
395+
owner=feature.owner,
406396
)
407397

408398
self._event_logger.log(
@@ -847,31 +837,28 @@ def get_experiment(self, experiment_name: str) -> Optional[ExperimentConfig]:
847837
:return: an :py:class:`~reddit_decider.ExperimentConfig` `dataclass <https://github.com/reddit/experiments.py/blob/develop/reddit_decider/__init__.py#L44>`_
848838
representation of an experiment if found, else :code:`None`.
849839
"""
850-
decider = self._get_decider()
851-
if decider is None:
840+
if self._internal is None:
841+
logger.error("RustDecider is None--did not initialize.")
852842
return None
853843

854-
experiment = decider.get_experiment(experiment_name)
855-
error = experiment.err()
856-
if error:
857-
# sending to debug logger to avoid printing "Feature x not found." logs
858-
logger.debug(f"Encountered error in decider.get_experiment(): {error}")
844+
try:
845+
feature = self._internal.get_feature(experiment_name)
846+
except FeatureNotFoundException as exc:
847+
warnings.warn(str(exc))
859848
return None
860-
861-
exp_dict = experiment.val()
862-
863-
if exp_dict is None:
849+
except DeciderException as exc:
850+
logger.info(str(exc))
864851
return None
865852

866853
return ExperimentConfig(
867-
id=int(exp_dict.get("id", 0)),
868-
name=exp_dict.get("name"),
869-
version=str(exp_dict.get("version")),
870-
bucket_val=exp_dict.get("variant_set", {}).get("bucket_val"),
871-
start_ts=exp_dict.get("variant_set", {}).get("start_ts"),
872-
stop_ts=exp_dict.get("variant_set", {}).get("stop_ts"),
873-
owner=exp_dict.get("owner"),
874-
emit_event=bool(exp_dict.get("emit_event")),
854+
id=feature.id,
855+
name=feature.name,
856+
version=str(feature.version),
857+
bucket_val=feature.bucket_val,
858+
start_ts=feature.start_ts,
859+
stop_ts=feature.stop_ts,
860+
owner=feature.owner,
861+
emit_event=feature.emit_event,
875862
)
876863

877864

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
-r requirements-transitive.txt
22
baseplate==2.0.0a1
33
black==21.4b2
4-
reddit-decider==1.2.30
4+
reddit-decider==1.2.31
55
flake8==3.9.1
66
mypy==0.790
77
pyramid==2.0 # required for `from baseplate.frameworks.pyramid import BaseplateRequest` which calls `import pyramid.events`

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
install_requires=[
2020
"baseplate>=2.0.0a1,<3.0",
2121
"reddit-edgecontext>=1.0.0a3,<2.0",
22-
"reddit-decider~=1.2.30",
22+
"reddit-decider~=1.2.31",
2323
"typing_extensions>=3.10.0.0,<5.0",
2424
],
2525
package_data={"reddit_experiments": ["py.typed"]},

0 commit comments

Comments
 (0)