From 7adf57a1aa7fbd87b8f3636f9c63854e5d2100fe Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 16 Dec 2022 08:14:52 -0800 Subject: [PATCH 1/3] update get_experiment() & remove old decider bindings usage --- reddit_decider/__init__.py | 76 ++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/reddit_decider/__init__.py b/reddit_decider/__init__.py index ce26694..82aa133 100644 --- a/reddit_decider/__init__.py +++ b/reddit_decider/__init__.py @@ -187,16 +187,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 +369,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 +838,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, ) From fb04339d6a08d920566fa262d3a11373b5818ab4 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 16 Dec 2022 08:48:45 -0800 Subject: [PATCH 2/3] flake8 --- reddit_decider/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/reddit_decider/__init__.py b/reddit_decider/__init__.py index 82aa133..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 From 47c39fda69380442b843f300aeeac9510e5e3c01 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 11 Jan 2023 16:03:44 -0800 Subject: [PATCH 3/3] bump decider for get_feature() --- docs/requirements.txt | 2 +- requirements.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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/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"]},