diff --git a/tests/resolver/test_lib.py b/tests/resolver/test_lib.py index 80fe1c1..2d32449 100644 --- a/tests/resolver/test_lib.py +++ b/tests/resolver/test_lib.py @@ -7,7 +7,6 @@ import pytest from deepdiff import DeepDiff from deepdiff.operator import BaseOperator -from variantlib.errors import ConfigurationError from variantlib.errors import ValidationError from variantlib.models.variant import VariantDescription from variantlib.models.variant import VariantFeature @@ -609,6 +608,7 @@ def test_sort_and_filter_supported_variants_validation_errors( sort_and_filter_supported_variants( vdescs=vdescs, supported_vprops=vprops, # type: ignore[arg-type] + namespace_priorities=["a"], feature_priorities=feature_priorities, ) @@ -617,8 +617,11 @@ def test_sort_and_filter_supported_variants_validation_errors_with_no_priority( vdescs: list[VariantDescription], vprops: list[VariantProperty] ) -> None: # This one specifies no ordering/priority => can't sort - with pytest.raises(ConfigurationError, match="The variant environment needs"): + with pytest.raises( + ValidationError, match=r"Missing namespace_priorities for namespaces" + ): sort_and_filter_supported_variants( vdescs=vdescs, supported_vprops=vprops, + namespace_priorities=[], ) diff --git a/tests/resolver/test_sorting.py b/tests/resolver/test_sorting.py index 9b17338..3966aeb 100644 --- a/tests/resolver/test_sorting.py +++ b/tests/resolver/test_sorting.py @@ -4,7 +4,6 @@ from typing import Any import pytest -from variantlib.errors import ConfigurationError from variantlib.errors import ValidationError from variantlib.models.variant import VariantDescription from variantlib.models.variant import VariantFeature @@ -111,7 +110,6 @@ def test_get_namespace_priorities() -> None: def test_negative_get_namespace_priorities() -> None: vprop = VariantProperty(namespace="omnicorp", feature="no_exist", value="value") - assert get_namespace_priorities(vprop, None) == sys.maxsize assert get_namespace_priorities(vprop, []) == sys.maxsize assert get_namespace_priorities(vprop, ["other_corp"]) == sys.maxsize @@ -119,13 +117,13 @@ def test_negative_get_namespace_priorities() -> None: @pytest.mark.parametrize( ("vprop", "namespace_priorities"), [ - ("not a `VariantProperty`", None), + ("not a `VariantProperty`", []), (VariantProperty("a", "b", "c"), "not a list or None"), (VariantProperty("a", "b", "c"), [{"not a str": True}]), ], ) def test_get_namespace_priorities_validation_error( - vprop: VariantProperty, namespace_priorities: list[str] | None + vprop: VariantProperty, namespace_priorities: list[str] ) -> None: with pytest.raises(ValidationError): get_namespace_priorities(vprop=vprop, namespace_priorities=namespace_priorities) @@ -208,10 +206,10 @@ def test_sort_variant_properties_validation_error( def test_sort_variant_properties_configuration_error() -> None: - with pytest.raises(ConfigurationError): + with pytest.raises(ValidationError): sort_variant_properties( vprops=[VariantProperty("a", "b", "c"), VariantProperty("x", "y", "z")], - namespace_priorities=None, + namespace_priorities=[], feature_priorities=None, property_priorities=None, ) diff --git a/variantlib/resolver/lib.py b/variantlib/resolver/lib.py index 7cc00a8..f81daf4 100644 --- a/variantlib/resolver/lib.py +++ b/variantlib/resolver/lib.py @@ -103,7 +103,7 @@ def filter_variants( def sort_and_filter_supported_variants( vdescs: list[VariantDescription], supported_vprops: list[VariantProperty], - namespace_priorities: list[VariantNamespace] | None = None, + namespace_priorities: list[VariantNamespace], feature_priorities: dict[VariantNamespace, list[VariantFeatureName]] | None = None, property_priorities: dict[ VariantNamespace, dict[VariantFeatureName, list[VariantFeatureValue]] diff --git a/variantlib/resolver/sorting.py b/variantlib/resolver/sorting.py index ec44fbe..1de41d8 100644 --- a/variantlib/resolver/sorting.py +++ b/variantlib/resolver/sorting.py @@ -7,7 +7,6 @@ from itertools import chain from itertools import groupby -from variantlib.errors import ConfigurationError from variantlib.errors import ValidationError from variantlib.models.variant import VariantDescription from variantlib.models.variant import VariantProperty @@ -79,7 +78,7 @@ def get_feature_priorities( def get_namespace_priorities( vprop: VariantProperty, - namespace_priorities: list[VariantNamespace] | None, + namespace_priorities: list[VariantNamespace], ) -> int: """ Get the namespace priority of a `VariantProperty` object. @@ -90,8 +89,6 @@ def get_namespace_priorities( """ validate_type(vprop, VariantProperty) - if namespace_priorities is None: - return sys.maxsize validate_type(namespace_priorities, list[str]) # if not present push at the end @@ -103,7 +100,7 @@ def get_namespace_priorities( def sort_variant_properties( vprops: list[VariantProperty], - namespace_priorities: list[VariantNamespace] | None, + namespace_priorities: list[VariantNamespace], feature_priorities: dict[VariantNamespace, list[VariantFeatureName]] | None = None, property_priorities: dict[ VariantNamespace, dict[VariantFeatureName, list[VariantFeatureValue]] @@ -120,9 +117,7 @@ def sort_variant_properties( :return: Sorted list of `VariantProperty` objects. """ validate_type(vprops, list[VariantProperty]) - - if namespace_priorities is not None: - validate_type(namespace_priorities, list[VariantNamespace]) + validate_type(namespace_priorities, list[VariantNamespace]) if feature_priorities is not None: validate_type( @@ -134,22 +129,10 @@ def sort_variant_properties( dict[VariantNamespace, dict[VariantFeatureName, list[VariantFeatureValue]]], ) - error_message = ( - "The variant environment needs to be (re)configured, please execute " - "`variantlib config setup` and re-run your command." - ) - found_namespaces = {vprop.namespace for vprop in vprops} - if namespace_priorities is None or not namespace_priorities: - if len(found_namespaces) > 1: - raise ConfigurationError(error_message) - - # if there is only one namespace, use it as the default - namespace_priorities = list(found_namespaces) - - elif len(found_namespaces.difference(namespace_priorities)) > 0: - raise ConfigurationError(error_message) + if missing := found_namespaces.difference(namespace_priorities): + raise ValidationError(f"Missing namespace_priorities for namespaces {missing}") # 1. Reorder properties according to namespace priorities. sorted_by_namespace = sorted(