diff --git a/minimum_versions/policy.py b/minimum_versions/policy.py index a167c04..6dd144a 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"]), ) 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