From 7156d10751770bcb058a7ec14842c8a20ed76c31 Mon Sep 17 00:00:00 2001 From: timlichtenberg Date: Mon, 31 Aug 2026 22:35:12 +0200 Subject: [PATCH 1/2] Bump fwl-io floor to 26.8.31 for the Dataverse mirror fix The mirror upload fix, the logger fix, and the docstring/test updates from fwl-io#34 only reach my runs once the floor moves past 26.7.25. I confirmed 26.8.31 is live on PyPI and resolves cleanly in the proteus environment. --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 56246356b..4e4fb5e25 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,11 +82,11 @@ dependencies = [ "sympy", "astropy", "toml", - # 26.7.25 bounds the time a fetch can take: every request carries an + # This floor bounds the time a fetch can take: every request carries an # explicit connect and read timeout, and a transient failure is retried # with backoff instead of ending the fetch. Below that floor a stalled # mirror hangs the start of a run with no diagnostic. - "fwl-io>=26.7.25", + "fwl-io>=26.8.31", "zenodo-get", "zenodo-client>=0.4.1", "osfclient", From 8cc14e466c657bb7fc73449fee9bda753435b24b Mon Sep 17 00:00:00 2001 From: timlichtenberg Date: Mon, 21 Sep 2026 19:31:42 +0200 Subject: [PATCH 2/2] Test the fwl-io floor as a lower bound on the manifest schema floor The pyproject fwl-io requirement may exceed the manifest schema floor FWL_IO_FLOOR, since it also tracks fixes in later fwl-io releases. It must not fall below it, because pip could then install an fwl-io that reads the manifest as malformed. Replace the equality assertion with a version-parsed comparison, rename the test to match, and reword the FWL_IO_FLOOR comment to state the relation. FWL_IO_FLOOR stays at 26.7.25, the oldest fwl-io that reads manifest schema 1. --- src/proteus/data/__init__.py | 8 ++++---- tests/data/test_manifest.py | 15 ++++++++++----- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/proteus/data/__init__.py b/src/proteus/data/__init__.py index 83e06a9e3..a4716181c 100644 --- a/src/proteus/data/__init__.py +++ b/src/proteus/data/__init__.py @@ -24,10 +24,10 @@ EXOPLANET_REFERENCE = 'observe.exoplanet_reference' MASS_RADIUS_ZENG_2019 = 'observe.mass_radius.zeng_2019' -# The manifest schema this manifest is written against. An fwl-io older than -# this reads the manifest as malformed rather than as a version mismatch, so the -# load names which side is out of date. Keep in step with the fwl-io requirement -# in pyproject.toml; the test suite pins the two together. +# The oldest fwl-io that reads this manifest schema. An older fwl-io reads the +# manifest as malformed rather than as a version mismatch, so the load names +# which side is out of date. The fwl-io requirement in pyproject.toml must be at +# least this version; the test suite enforces the relation. FWL_IO_FLOOR = '26.7.25' diff --git a/tests/data/test_manifest.py b/tests/data/test_manifest.py index c966572b1..32207c602 100644 --- a/tests/data/test_manifest.py +++ b/tests/data/test_manifest.py @@ -238,13 +238,16 @@ class _NewDataset: assert _fwl_io_derives_the_location() is True -def test_declared_floor_matches_the_requirement(): - """The fwl-io floor in the error message equals the one pip installs. +def test_declared_floor_is_not_below_the_schema_floor(): + """The pyproject fwl-io floor is not below the manifest schema floor. - If the two drift, the upgrade instruction names a version that does not fix - the problem the reader is looking at. + A pyproject floor below the schema floor would let pip install an fwl-io that + cannot read the manifest, which the load reports as a stale install. A + pyproject floor above it is allowed: it tracks fixes in later fwl-io + releases, and the upgrade instruction names only the schema floor. """ from packaging.requirements import Requirement + from packaging.version import Version requirements = _pyproject()['project']['dependencies'] bounds = [ @@ -258,7 +261,9 @@ def test_declared_floor_matches_the_requirement(): # Checked first so a dropped `>=` reports the absence it is, rather than # reaching the comparison below and reading as a version mismatch. assert len(bounds) == 1, f'expected one lower bound on fwl-io, found {bounds}' - assert bounds == [FWL_IO_FLOOR], f'pyproject floor {bounds} vs module floor {FWL_IO_FLOOR}' + assert Version(bounds[0]) >= Version(FWL_IO_FLOOR), ( + f'pyproject floor {bounds[0]} is below the manifest schema floor {FWL_IO_FLOOR}' + ) def test_manifest_and_registries_are_declared_as_package_data():