From 00e3e24a5b41669888d6ad31b6c1de403d4a7e4c Mon Sep 17 00:00:00 2001 From: Mathias Hauser Date: Wed, 10 Sep 2025 15:36:54 +0200 Subject: [PATCH 1/2] error msg if version is missing --- envs/failing-env2.yaml | 4 ++++ minimum_versions.py | 23 +++++++++++++++++++++++ test_script.py | 24 +++++++++++++++++++++++- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 envs/failing-env2.yaml diff --git a/envs/failing-env2.yaml b/envs/failing-env2.yaml new file mode 100644 index 0000000..4aa11c8 --- /dev/null +++ b/envs/failing-env2.yaml @@ -0,0 +1,4 @@ +channels: + - conda-forge +dependencies: + - package_no_version_not_in_exclude diff --git a/minimum_versions.py b/minimum_versions.py index f2bdaa2..3fe14d9 100644 --- a/minimum_versions.py +++ b/minimum_versions.py @@ -153,6 +153,23 @@ def parse_environment(text): return specs, warnings +def assert_spec_has_version(environments): + # packages in policy.exclude were already removed + + for env, specs in environments.items(): + for spec in specs: + if spec.version is None: + + msg = ( + f"No minimum version found for '{spec.name}' in '{env}'. Either" + " add a version or add to the list of excluded packages in the" + " policy file." + ) + + raise ValueError(msg) + + + def parse_policy(file): policy = yaml.safe_load(file) try: @@ -344,6 +361,10 @@ def parse_date(string): @click.option("--today", type=parse_date, default=None) @click.option("--policy", "policy_file", type=click.File(mode="r"), required=True) def main(today, policy_file, environment_paths): + _main(today, policy_file, environment_paths) + + +def _main(today, policy_file, environment_paths): console = Console() policy = parse_policy(policy_file) @@ -360,6 +381,8 @@ def main(today, policy_file, environment_paths): for env, (specs, _) in parsed_environments.items() } + assert_spec_has_version(environments) + all_packages = list( dict.fromkeys(spec.name for spec in concat(environments.values())) ) diff --git a/test_script.py b/test_script.py index 22a62f9..a22ce66 100644 --- a/test_script.py +++ b/test_script.py @@ -1,9 +1,10 @@ import datetime as dt import pytest +import pathlib from rattler import Version -from minimum_versions import Policy, Release, Spec +from minimum_versions import Policy, Release, Spec, _main @pytest.mark.parametrize( @@ -27,6 +28,25 @@ def test_spec_parse(text, expected_spec, expected_name, expected_warnings): assert actual_warnings == expected_warnings +def test_error_missing_version_or_exclude(): + + + msg = ( + "No minimum version found for 'package_no_version_not_in_exclude' in" + " 'failing-env2'. Either add a version or add to the list of excluded packages" + " in the policy file." + ) + + with open("policy.yaml") as policy: + + environment_paths = [pathlib.Path("envs/failing-env2.yaml")] + + with pytest.raises(ValueError, match=msg): + _main(dt.date(2023, 12, 12), policy, environment_paths=environment_paths) + + + + @pytest.mark.parametrize( ["package_name", "policy", "today", "expected"], ( @@ -72,3 +92,5 @@ def test_policy_minimum_version(package_name, policy, today, expected): actual = policy.minimum_version(today, package_name, releases[package_name]) assert actual == expected + + From bf5680c2d6b35aaa257e11f8bfb904e4665a8b4e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:40:03 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- minimum_versions.py | 3 +-- test_script.py | 7 +------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/minimum_versions.py b/minimum_versions.py index 3fe14d9..559e694 100644 --- a/minimum_versions.py +++ b/minimum_versions.py @@ -164,12 +164,11 @@ def assert_spec_has_version(environments): f"No minimum version found for '{spec.name}' in '{env}'. Either" " add a version or add to the list of excluded packages in the" " policy file." - ) + ) raise ValueError(msg) - def parse_policy(file): policy = yaml.safe_load(file) try: diff --git a/test_script.py b/test_script.py index a22ce66..577d0e3 100644 --- a/test_script.py +++ b/test_script.py @@ -1,7 +1,7 @@ import datetime as dt +import pathlib import pytest -import pathlib from rattler import Version from minimum_versions import Policy, Release, Spec, _main @@ -30,7 +30,6 @@ def test_spec_parse(text, expected_spec, expected_name, expected_warnings): def test_error_missing_version_or_exclude(): - msg = ( "No minimum version found for 'package_no_version_not_in_exclude' in" " 'failing-env2'. Either add a version or add to the list of excluded packages" @@ -45,8 +44,6 @@ def test_error_missing_version_or_exclude(): _main(dt.date(2023, 12, 12), policy, environment_paths=environment_paths) - - @pytest.mark.parametrize( ["package_name", "policy", "today", "expected"], ( @@ -92,5 +89,3 @@ def test_policy_minimum_version(package_name, policy, today, expected): actual = policy.minimum_version(today, package_name, releases[package_name]) assert actual == expected - -