From 693d6ca399108444a6449aedbab900353e5d3d9d Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Sat, 20 Dec 2025 14:19:14 +0100 Subject: [PATCH 1/4] wrap the override in `Version` --- minimum_versions/policy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minimum_versions/policy.py b/minimum_versions/policy.py index a167c04..44bbf76 100644 --- a/minimum_versions/policy.py +++ b/minimum_versions/policy.py @@ -77,7 +77,7 @@ class Policy: def minimum_version(self, today, package_name, releases): if (override := self.overrides.get(package_name)) is not None: - return find_release(releases, version=override) + return find_release(releases, version=Version(override)) suitable_releases = [ release for release in releases if is_suitable_release(release) From 054618edf3aa5e6fbf2d5687b82d036b2bd241cf Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Sat, 20 Dec 2025 14:36:19 +0100 Subject: [PATCH 2/4] tests for `parse_policy` --- minimum_versions/tests/test_policy.py | 58 ++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/minimum_versions/tests/test_policy.py b/minimum_versions/tests/test_policy.py index bc2ab96..1e0decd 100644 --- a/minimum_versions/tests/test_policy.py +++ b/minimum_versions/tests/test_policy.py @@ -1,9 +1,11 @@ import datetime as dt +import textwrap +from io import StringIO import pytest from rattler import Version -from minimum_versions.policy import Policy +from minimum_versions.policy import Policy, parse_policy from minimum_versions.release import Release @@ -52,3 +54,57 @@ def test_policy_minimum_version(package_name, policy, today, expected): actual = policy.minimum_version(today, package_name, releases[package_name]) assert actual == expected + + +@pytest.mark.parametrize( + ["content", "expected"], + ( + pytest.param( + """\ + channels: [conda-forge] + platforms: [noarch] + policy: + packages: + numpy: 12 + default: 6 + overrides: {} + exclude: [] + ignored_violations: [] + """, + Policy( + {"numpy": 12}, + 6, + overrides={}, + channels=["conda-forge"], + platforms=["noarch"], + ), + id="normal", + ), + pytest.param( + """\ + channels: [conda-forge] + platforms: [noarch] + policy: + packages: + numpy: 12 + default: 6 + overrides: + scipy: "1.2.1" + exclude: [] + ignored_violations: [] + """, + Policy( + {"numpy": 12}, + 6, + overrides={"scipy": Version("1.2.1")}, + channels=["conda-forge"], + platforms=["noarch"], + ), + id="overrides", + ), + ), +) +def test_parse_policy(content, expected): + f = StringIO(textwrap.dedent(content.rstrip())) + actual = parse_policy(f) + assert actual == expected From 7e01dbaef26460f6b1e8c50a3527a4f044c528a0 Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Sat, 20 Dec 2025 14:37:08 +0100 Subject: [PATCH 3/4] convert overrides to `Version` objects --- minimum_versions/policy.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/minimum_versions/policy.py b/minimum_versions/policy.py index 44bbf76..0933e7c 100644 --- a/minimum_versions/policy.py +++ b/minimum_versions/policy.py @@ -5,6 +5,7 @@ import yaml from dateutil.relativedelta import relativedelta from rattler import Version +from tlz.dicttoolz import valmap schema = { "type": "object", @@ -115,7 +116,7 @@ def parse_policy(f): package_months=package_policy["packages"], default_months=package_policy["default"], ignored_violations=package_policy["ignored_violations"], - overrides=package_policy["overrides"], + overrides=valmap(Version, package_policy["overrides"]), ) From 2f68d0687821d03fa02567501f464eb6c669516f Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Sat, 20 Dec 2025 14:37:23 +0100 Subject: [PATCH 4/4] revert the conversion of the override --- minimum_versions/policy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minimum_versions/policy.py b/minimum_versions/policy.py index 0933e7c..6dd144a 100644 --- a/minimum_versions/policy.py +++ b/minimum_versions/policy.py @@ -78,7 +78,7 @@ class Policy: def minimum_version(self, today, package_name, releases): if (override := self.overrides.get(package_name)) is not None: - return find_release(releases, version=Version(override)) + return find_release(releases, version=override) suitable_releases = [ release for release in releases if is_suitable_release(release)