Skip to content

Commit d8170e4

Browse files
committed
Add an API to get environment dict for marker processing
1 parent 414ee37 commit d8170e4

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

tests/test_api.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from variantlib.api import VariantProperty
2424
from variantlib.api import VariantValidationResult
2525
from variantlib.api import check_variant_supported
26+
from variantlib.api import get_variant_environment_dict
2627
from variantlib.api import get_variant_hashes_by_priority
2728
from variantlib.api import make_variant_dist_info
2829
from variantlib.api import validate_variant
@@ -493,3 +494,33 @@ def test_check_variant_supported_generic() -> None:
493494
use_auto_install=False,
494495
venv_path=None,
495496
)
497+
498+
499+
def test_get_variant_environment_dict() -> None:
500+
vdesc = VariantDescription(
501+
[
502+
VariantProperty("ns1", "feat1", "val1"),
503+
VariantProperty("ns1", "feat2", "val2"),
504+
VariantProperty("ns2", "feat1", "val1"),
505+
VariantProperty("ns3", "feat2", "val2"),
506+
]
507+
)
508+
assert get_variant_environment_dict(vdesc) == {
509+
"variant_features": {
510+
"ns1 :: feat1",
511+
"ns1 :: feat2",
512+
"ns2 :: feat1",
513+
"ns3 :: feat2",
514+
},
515+
"variant_namespaces": {
516+
"ns1",
517+
"ns2",
518+
"ns3",
519+
},
520+
"variant_properties": {
521+
"ns1 :: feat1 :: val1",
522+
"ns1 :: feat2 :: val2",
523+
"ns2 :: feat1 :: val1",
524+
"ns3 :: feat2 :: val2",
525+
},
526+
}

variantlib/api.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"VariantFeatureConfig",
4040
"VariantProperty",
4141
"VariantValidationResult",
42+
"get_variant_environment_dict",
4243
"get_variant_hashes_by_priority",
4344
"make_variant_dist_info",
4445
"validate_variant",
@@ -246,3 +247,17 @@ def check_variant_supported(
246247
)
247248
)
248249
)
250+
251+
252+
def get_variant_environment_dict(
253+
variant_desc: VariantDescription,
254+
) -> dict[str, set[str]]:
255+
"""Get the dict for packaging Marker.evaluate()"""
256+
257+
return {
258+
"variant_namespaces": {vprop.namespace for vprop in variant_desc.properties},
259+
"variant_features": {
260+
vprop.feature_object.to_str() for vprop in variant_desc.properties
261+
},
262+
"variant_properties": {vprop.to_str() for vprop in variant_desc.properties},
263+
}

0 commit comments

Comments
 (0)