Skip to content

Commit 9b4415d

Browse files
committed
Support VariantsJson arg to get_variant_hashes_by_priority()
1 parent e489c5a commit 9b4415d

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

tests/test_api.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
from variantlib.models.metadata import VariantMetadata
4646
from variantlib.plugins.loader import ManualPluginLoader
4747
from variantlib.pyproject_toml import VariantPyProjectToml
48+
from variantlib.variants_json import VariantsJson
4849

4950
if TYPE_CHECKING:
5051
from collections.abc import Generator
@@ -68,8 +69,10 @@ def configs(
6869
return list(mocked_plugin_loader.get_supported_configs().values())
6970

7071

72+
@pytest.mark.parametrize("construct", [False, True])
7173
def test_get_variant_hashes_by_priority_roundtrip(
7274
configs,
75+
construct: bool,
7376
):
7477
"""Test that we can round-trip all combinations via variants.json and get the same
7578
result."""
@@ -84,7 +87,7 @@ def test_get_variant_hashes_by_priority_roundtrip(
8487
combinations: list[VariantDescription] = [
8588
*list(get_combinations(configs, namespace_priorities)),
8689
]
87-
variants_json = {
90+
variants_json: dict | VariantsJson = {
8891
VARIANTS_JSON_DEFAULT_PRIO_KEY: {
8992
VARIANTS_JSON_NAMESPACE_KEY: namespace_priorities,
9093
},
@@ -96,6 +99,7 @@ def test_get_variant_hashes_by_priority_roundtrip(
9699
vdesc.hexdigest: vdesc.to_dict() for vdesc in combinations
97100
},
98101
}
102+
variants_json = VariantsJson(variants_json)
99103

100104
assert get_variant_hashes_by_priority(
101105
variants_json=variants_json, use_auto_install=False, venv_path=None

variantlib/api.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646

4747
def get_variant_hashes_by_priority(
4848
*,
49-
variants_json: dict,
49+
variants_json: dict | VariantsJson,
5050
use_auto_install: bool = True,
5151
venv_path: str | pathlib.Path | None = None,
5252
namespace_priorities: list[str] | None = None,
@@ -57,17 +57,16 @@ def get_variant_hashes_by_priority(
5757
forbidden_properties: list[str] | None = None,
5858
) -> list[str]:
5959
supported_vprops = []
60-
parsed_variants_json = VariantsJson(variants_json)
60+
if not isinstance(variants_json, VariantsJson):
61+
variants_json = VariantsJson(variants_json)
6162

6263
venv_path = venv_path if venv_path is None else pathlib.Path(venv_path)
6364

6465
with (
6566
AutoPythonEnv(
6667
use_auto_install=use_auto_install, isolated=False, venv_path=venv_path
6768
) as python_ctx,
68-
PluginLoader(
69-
variant_nfo=parsed_variants_json, python_ctx=python_ctx
70-
) as plugin_loader,
69+
PluginLoader(variant_nfo=variants_json, python_ctx=python_ctx) as plugin_loader,
7170
):
7271
supported_vprops = list(
7372
itertools.chain.from_iterable(
@@ -105,22 +104,22 @@ def get_variant_hashes_by_priority(
105104
return [
106105
vdesc.hexdigest
107106
for vdesc in sort_and_filter_supported_variants(
108-
list(parsed_variants_json.variants.values()),
107+
list(variants_json.variants.values()),
109108
supported_vprops,
110109
namespace_priorities=aggregate_priority_lists(
111110
namespace_priorities,
112111
config.namespace_priorities,
113-
parsed_variants_json.namespace_priorities,
112+
variants_json.namespace_priorities,
114113
),
115114
feature_priorities=aggregate_priority_lists(
116115
_feature_priorities,
117116
config.feature_priorities,
118-
parsed_variants_json.feature_priorities,
117+
variants_json.feature_priorities,
119118
),
120119
property_priorities=aggregate_priority_lists(
121120
_property_priorities,
122121
config.property_priorities,
123-
parsed_variants_json.property_priorities,
122+
variants_json.property_priorities,
124123
),
125124
forbidden_namespaces=forbidden_namespaces,
126125
forbidden_features=_forbidden_features,

0 commit comments

Comments
 (0)