From 4678781f841d0eab477ea627124882735e630280 Mon Sep 17 00:00:00 2001 From: Donny Franks Date: Fri, 11 Sep 2026 15:26:46 -0700 Subject: [PATCH] test decider 1.18 compatibility --- .github/workflows/python-package.yaml | 13 ++++++++++++- docs/requirements.txt | 3 ++- requirements.txt | 3 ++- setup.py | 3 ++- tests/decider_tests.py | 25 +++++++++++++++++++++++++ 5 files changed, 43 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-package.yaml b/.github/workflows/python-package.yaml index e359fb3..23c9fde 100644 --- a/.github/workflows/python-package.yaml +++ b/.github/workflows/python-package.yaml @@ -13,7 +13,17 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.9', '3.10'] + include: + - python-version: '3.8' + reddit-decider-version: '1.15.0' + - python-version: '3.9' + reddit-decider-version: '1.15.0' + - python-version: '3.9' + reddit-decider-version: '1.18.1' + - python-version: '3.10' + reddit-decider-version: '1.15.0' + - python-version: '3.10' + reddit-decider-version: '1.18.1' steps: - uses: actions/checkout@v2 @@ -33,6 +43,7 @@ jobs: - name: Install dependencies run: | python -m pip install -r requirements.txt + python -m pip install "reddit-decider==${{ matrix.reddit-decider-version }}" - name: Lint run: | diff --git a/docs/requirements.txt b/docs/requirements.txt index 8bd5b34..3a9ffd0 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -4,7 +4,8 @@ docutils==0.16 Jinja2==2.11.2 MarkupSafe==1.1.1 pydocstyle==5.1.1 -reddit-decider==1.15.0 +reddit-decider==1.15.0; python_version < "3.9" +reddit-decider==1.18.1; python_version >= "3.9" reddit-edgecontext==1.0.0a3 Sphinx==3.4.0 sphinx-autodoc-typehints==1.11.1 diff --git a/requirements.txt b/requirements.txt index 5f0d457..6884046 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,8 @@ -r requirements-transitive.txt baseplate>=2.0.0a1,<3.0 black==21.4b2 -reddit-decider==1.15.0 +reddit-decider==1.15.0; python_version < "3.9" +reddit-decider==1.18.1; python_version >= "3.9" flake8==3.9.1 mypy==0.790 prometheus-client>=0.12.0,<1.0 diff --git a/setup.py b/setup.py index 1ccaea6..b441242 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,8 @@ install_requires=[ "baseplate>=2.0.0a1,<3.0", "reddit-edgecontext>=1.0.0a3,<2.0", - "reddit-decider~=1.15.0", + "reddit-decider>=1.15.0,<1.16.0; python_version < '3.9'", + "reddit-decider>=1.15.0,<1.19.0; python_version >= '3.9'", "typing_extensions>=3.10.0.0,<5.0", ], package_data={"reddit_experiments": ["py.typed"], "reddit_decider": ["py.typed"]}, diff --git a/tests/decider_tests.py b/tests/decider_tests.py index 7300bfe..3f8ada1 100644 --- a/tests/decider_tests.py +++ b/tests/decider_tests.py @@ -4,11 +4,13 @@ import tempfile import unittest +from importlib.metadata import version as package_version from unittest import mock from baseplate import RequestContext from baseplate import ServerSpan from baseplate.lib.events import DebugLogger +from packaging.version import Version from reddit_edgecontext import ValidatedAuthenticationToken from reddit_decider import Decider @@ -20,6 +22,8 @@ logger = logging.getLogger() +DECIDER_SUPPORTS_PROPERTY_REGISTRY = Version(package_version("reddit-decider")) >= Version("1.18.1") + USER_ID = "t2_1234" IS_LOGGED_IN = True AD_ACCOUNT_ID = "t2_4321" @@ -539,6 +543,27 @@ def test_get_variant(self): experiment_name="exp_1", variant=variant, event_fields=event_fields ) + @unittest.skipUnless( + DECIDER_SUPPORTS_PROPERTY_REGISTRY, + "property registries require reddit-decider 1.18.1 or newer", + ) + def test_manifest_with_property_registry_preserves_experiments(self): + config = dict(self.exp_base_config) + config["$properties"] = { + "ranking_algorithm": { + "type": "String", + "fallback_value": "hot_v1", + "targeted_values": [], + } + } + + with create_temp_config_file(config) as f: + decider = setup_decider(f, self.dc, self.mock_span, self.event_logger) + + variant = decider.get_variant_without_expose(experiment_name="exp_1") + + self.assertEqual(variant, "variant_4") + def test_none_returned_on_get_variant_call_with_bad_id(self): config = { "test": {