From 2efe8a165d3d70ee18dbe708c49a734b8938ce1f Mon Sep 17 00:00:00 2001 From: stuart Date: Sat, 23 May 2026 17:17:15 -0400 Subject: [PATCH 1/3] fix(runtime): align subpackage version exports --- flapjacksearch/__init__.py | 27 +++++++++++++++++++++++++-- tests/test_version_consistency.py | 27 +++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 tests/test_version_consistency.py diff --git a/flapjacksearch/__init__.py b/flapjacksearch/__init__.py index 4d12fcb..56618cf 100644 --- a/flapjacksearch/__init__.py +++ b/flapjacksearch/__init__.py @@ -1,4 +1,27 @@ # coding: utf-8 -# The version of the flapjacksearch package -__version__ = "0.1.0b1" \ No newline at end of file +from importlib import import_module +from pkgutil import iter_modules + +# The canonical version of the flapjacksearch package. +__version__ = "0.1.0b1" + + +def _sync_generated_subpackage_versions() -> None: + """Keep generated subpackage runtime versions aligned with the root package. + + Generated clients stamp an OpenAPI spec version (for example ``4.36.0``) + into each top-level subpackage ``__init__``. At runtime, consumers expect + ``flapjacksearch..__version__`` to match the distributable + package version exposed by ``flapjacksearch.__version__``. + """ + + for module_info in iter_modules(__path__): + if not module_info.ispkg: + continue + module = import_module(f"{__name__}.{module_info.name}") + if hasattr(module, "__version__"): + module.__version__ = __version__ + + +_sync_generated_subpackage_versions() diff --git a/tests/test_version_consistency.py b/tests/test_version_consistency.py new file mode 100644 index 0000000..c077c72 --- /dev/null +++ b/tests/test_version_consistency.py @@ -0,0 +1,27 @@ +"""Version consistency checks for root and generated subpackages.""" + +from importlib import import_module + +import flapjacksearch + + +SUBPACKAGE_NAMES = ( + "abtesting", + "abtesting_v3", + "analytics", + "composition", + "http", + "ingestion", + "insights", + "monitoring", + "personalization", + "query_suggestions", + "recommend", + "search", +) + + +def test_generated_subpackages_use_root_runtime_version(): + for subpackage_name in SUBPACKAGE_NAMES: + module = import_module(f"flapjacksearch.{subpackage_name}") + assert module.__version__ == flapjacksearch.__version__ From 1a607a4baafe7701fd630c5d9fcefb7ce3ba66f5 Mon Sep 17 00:00:00 2001 From: stuart Date: Sat, 23 May 2026 17:17:46 -0400 Subject: [PATCH 2/3] chore(release): prepare 1.0.0 --- flapjacksearch/__init__.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flapjacksearch/__init__.py b/flapjacksearch/__init__.py index 56618cf..3d322ae 100644 --- a/flapjacksearch/__init__.py +++ b/flapjacksearch/__init__.py @@ -4,7 +4,7 @@ from pkgutil import iter_modules # The canonical version of the flapjacksearch package. -__version__ = "0.1.0b1" +__version__ = "1.0.0" def _sync_generated_subpackage_versions() -> None: diff --git a/pyproject.toml b/pyproject.toml index 0262341..380e8de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "flapjack-search" -version = "0.1.0b1" +version = "1.0.0" description = "A fully-featured and blazing-fast Python API client to interact with Flapjack Search. Drop-in replacement for algoliasearch." authors = ["Flapjack "] license = "MIT" From e5ccd5beeedb9f8b9d6c40a74e443d492d7d47a6 Mon Sep 17 00:00:00 2001 From: stuart Date: Sat, 23 May 2026 17:23:51 -0400 Subject: [PATCH 3/3] test: discover generated subpackages dynamically --- tests/test_version_consistency.py | 32 ++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/tests/test_version_consistency.py b/tests/test_version_consistency.py index c077c72..c655ead 100644 --- a/tests/test_version_consistency.py +++ b/tests/test_version_consistency.py @@ -1,27 +1,29 @@ """Version consistency checks for root and generated subpackages.""" from importlib import import_module +from pkgutil import iter_modules import flapjacksearch -SUBPACKAGE_NAMES = ( - "abtesting", - "abtesting_v3", - "analytics", - "composition", - "http", - "ingestion", - "insights", - "monitoring", - "personalization", - "query_suggestions", - "recommend", - "search", -) +def _generated_subpackage_names(): + """Discover current generated top-level subpackages from the package tree.""" + + return tuple( + sorted( + module_info.name + for module_info in iter_modules(flapjacksearch.__path__) + if module_info.ispkg + ) + ) def test_generated_subpackages_use_root_runtime_version(): - for subpackage_name in SUBPACKAGE_NAMES: + subpackage_names = _generated_subpackage_names() + + # Guard against a vacuous pass if package generation/output changes unexpectedly. + assert subpackage_names + + for subpackage_name in subpackage_names: module = import_module(f"flapjacksearch.{subpackage_name}") assert module.__version__ == flapjacksearch.__version__