diff --git a/docs/requirements.txt b/docs/requirements.txt index 306032e..4e42bad 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -4,7 +4,7 @@ docutils==0.16 Jinja2==2.11.2 MarkupSafe==1.1.1 pydocstyle==5.1.1 -reddit-decider==1.2.30 +reddit-decider==1.2.31 reddit-edgecontext==1.0.0a3 Sphinx==3.4.0 sphinx-autodoc-typehints==1.11.1 diff --git a/reddit_decider/__init__.py b/reddit_decider/__init__.py index ce26694..c6ff3b8 100644 --- a/reddit_decider/__init__.py +++ b/reddit_decider/__init__.py @@ -28,7 +28,6 @@ from rust_decider import DeciderException from rust_decider import Decision from rust_decider import FeatureNotFoundException -from rust_decider import make_ctx from rust_decider import ValueTypeMismatchException from typing_extensions import Literal @@ -187,16 +186,6 @@ def __init__( else: self._event_logger = DebugLogger() - def _get_decider(self) -> Optional[T]: - if self._internal is not None: - return self._internal.get_decider() - - return None - - def _get_ctx(self) -> Any: - context_fields = self._decider_context.to_dict() - return make_ctx(context_fields) - def _send_expose(self, event: str, exposure_fields: dict) -> None: event_fields = deepcopy(exposure_fields) try: @@ -379,30 +368,31 @@ def expose( if variant_name is None or variant_name == "": return - decider = self._get_decider() - if decider is None: + if self._internal is None: + logger.error("RustDecider is None--did not initialize.") return - experiment = decider.get_experiment(experiment_name) - error = experiment.err() - if error: - logger.warning(f"Encountered error in decider.get_experiment(): {error}") + try: + feature = self._internal.get_feature(experiment_name) + except FeatureNotFoundException as exc: + warnings.warn(str(exc)) + return + except DeciderException as exc: + logger.info(str(exc)) return event_context_fields = self._decider_context.to_event_dict() event_context_fields.update(exposure_kwargs or {}) event_fields = deepcopy(event_context_fields) - exp_dict = experiment.val() - experiment = ExperimentConfig( - id=int(exp_dict.get("id", 0)), - name=exp_dict.get("name"), - version=str(exp_dict.get("version")), - bucket_val=exp_dict.get("variant_set", {}).get("bucket_val"), - start_ts=exp_dict.get("variant_set", {}).get("start_ts"), - stop_ts=exp_dict.get("variant_set", {}).get("stop_ts"), - owner=exp_dict.get("owner"), + id=feature.id, + name=feature.name, + version=str(feature.version), + bucket_val=feature.bucket_val, + start_ts=feature.start_ts, + stop_ts=feature.stop_ts, + owner=feature.owner, ) self._event_logger.log( @@ -847,31 +837,28 @@ def get_experiment(self, experiment_name: str) -> Optional[ExperimentConfig]: :return: an :py:class:`~reddit_decider.ExperimentConfig` `dataclass `_ representation of an experiment if found, else :code:`None`. """ - decider = self._get_decider() - if decider is None: + if self._internal is None: + logger.error("RustDecider is None--did not initialize.") return None - experiment = decider.get_experiment(experiment_name) - error = experiment.err() - if error: - # sending to debug logger to avoid printing "Feature x not found." logs - logger.debug(f"Encountered error in decider.get_experiment(): {error}") + try: + feature = self._internal.get_feature(experiment_name) + except FeatureNotFoundException as exc: + warnings.warn(str(exc)) return None - - exp_dict = experiment.val() - - if exp_dict is None: + except DeciderException as exc: + logger.info(str(exc)) return None return ExperimentConfig( - id=int(exp_dict.get("id", 0)), - name=exp_dict.get("name"), - version=str(exp_dict.get("version")), - bucket_val=exp_dict.get("variant_set", {}).get("bucket_val"), - start_ts=exp_dict.get("variant_set", {}).get("start_ts"), - stop_ts=exp_dict.get("variant_set", {}).get("stop_ts"), - owner=exp_dict.get("owner"), - emit_event=bool(exp_dict.get("emit_event")), + id=feature.id, + name=feature.name, + version=str(feature.version), + bucket_val=feature.bucket_val, + start_ts=feature.start_ts, + stop_ts=feature.stop_ts, + owner=feature.owner, + emit_event=feature.emit_event, ) diff --git a/requirements.txt b/requirements.txt index 2861f19..47b39c0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ -r requirements-transitive.txt baseplate==2.0.0a1 black==21.4b2 -reddit-decider==1.2.30 +reddit-decider==1.2.31 flake8==3.9.1 mypy==0.790 pyramid==2.0 # required for `from baseplate.frameworks.pyramid import BaseplateRequest` which calls `import pyramid.events` diff --git a/setup.py b/setup.py index 71d462a..4504c15 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ install_requires=[ "baseplate>=2.0.0a1,<3.0", "reddit-edgecontext>=1.0.0a3,<2.0", - "reddit-decider~=1.2.30", + "reddit-decider~=1.2.31", "typing_extensions>=3.10.0.0,<5.0", ], package_data={"reddit_experiments": ["py.typed"]},