Skip to content

Commit a6bd5d7

Browse files
authored
Replace plugin-use with install-time (#126)
* Replace `plugin-use` with `install-time` Replace `plugin-use` trinary flag with a combination of `install-time` and `requires`. This is the first part of changes proposed in: wheelnext/pep_817_wheel_variants#103 Signed-off-by: Michał Górny <mgorny@quansight.com> * Update more "build plugins" with "AoT plugins" Signed-off-by: Michał Górny <mgorny@quansight.com> * Rename `is_build_plugin` to `is_aot_plugin` Signed-off-by: Michał Górny <mgorny@quansight.com> * Use `static-properties` Signed-off-by: Michał Górny <mgorny@quansight.com> --------- Signed-off-by: Michał Górny <mgorny@quansight.com>
1 parent 88d78d8 commit a6bd5d7

13 files changed

Lines changed: 344 additions & 269 deletions

tests/mocked_plugin_as_module.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class VariantFeatureConfig:
1515

1616

1717
namespace = "module_namespace"
18-
is_build_plugin = False
18+
is_aot_plugin = False
1919

2020

2121
def get_all_configs() -> list[VariantFeatureConfigType]:

tests/mocked_plugins.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def get_supported_configs() -> list[VariantFeatureConfigType]:
9191
class MockedAoTPlugin(PluginType):
9292
namespace = "aot_plugin"
9393

94-
is_build_plugin = True
94+
is_aot_plugin = True
9595

9696
@staticmethod
9797
def get_all_configs() -> list[VariantFeatureConfigType]:
@@ -115,7 +115,7 @@ def get_supported_configs() -> list[VariantFeatureConfigType]:
115115
class MultiValueAoTPlugin(PluginType):
116116
namespace = "aot_plugin"
117117

118-
is_build_plugin = True
118+
is_aot_plugin = True
119119

120120
@staticmethod
121121
def get_all_configs() -> list[VariantFeatureConfigType]:

tests/plugins/test_loader.py

Lines changed: 9 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
from variantlib.errors import ValidationError
2020
from variantlib.models.provider import ProviderConfig
2121
from variantlib.models.provider import VariantFeatureConfig
22-
from variantlib.models.variant_info import PluginUse
2322
from variantlib.models.variant_info import ProviderInfo
2423
from variantlib.models.variant_info import VariantInfo
2524
from variantlib.plugins.loader import BasePluginLoader
@@ -515,7 +514,7 @@ def test_optional_plugins(value: bool | list[VariantNamespace], expected: bool)
515514
@pytest.mark.parametrize(
516515
"loader_call",
517516
[
518-
partial(PluginLoader, VariantInfo(), include_build_plugins=True),
517+
partial(PluginLoader, VariantInfo(), include_aot_plugins=True),
519518
partial(ListPluginLoader, []),
520519
],
521520
)
@@ -559,33 +558,16 @@ def test_filter_plugins(value: list[VariantNamespace]) -> None:
559558
assert set(loader.namespaces) == expected_namespaces
560559

561560

562-
@pytest.mark.parametrize("include_build_plugins", [False, True])
563-
def test_package_defined_properties(include_build_plugins: bool) -> None:
561+
@pytest.mark.parametrize("include_aot_plugins", [False, True])
562+
def test_package_defined_properties(include_aot_plugins: bool) -> None:
564563
variant_info = VariantInfo(
565564
namespace_priorities=[
566565
"test_namespace",
567566
"second_namespace",
568567
"private",
569568
],
570-
feature_priorities={
571-
"test_namespace": ["foo"],
572-
"second_namespace": ["bar"],
573-
"private": ["baz"],
574-
},
575-
property_priorities={
576-
"test_namespace": {
577-
"foo": ["v1", "v2"],
578-
"bar": ["v3", "v4"],
579-
"baz": ["v5", "v6"],
580-
},
581-
"second_namespace": {
582-
"foo": ["v1", "v2"],
583-
"bar": ["v3", "v4"],
584-
"baz": ["v5", "v6"],
585-
},
569+
static_properties={
586570
"private": {
587-
"foo": ["v1", "v2"],
588-
"bar": ["v3", "v4"],
589571
"baz": ["v5", "v6"],
590572
},
591573
},
@@ -596,12 +578,10 @@ def test_package_defined_properties(include_build_plugins: bool) -> None:
596578
"second_namespace": ProviderInfo(
597579
requires=["variantlib"],
598580
plugin_api="tests.mocked_plugins:MockedPluginB",
599-
plugin_use=PluginUse.BUILD,
581+
install_time=False,
600582
),
601583
"private": ProviderInfo(
602-
plugin_api="ignored",
603-
plugin_use=PluginUse.NONE,
604-
requires=["ignored"],
584+
install_time=False,
605585
),
606586
},
607587
)
@@ -630,19 +610,6 @@ def test_package_defined_properties(include_build_plugins: bool) -> None:
630610
),
631611
],
632612
),
633-
"second_namespace": ProviderConfig(
634-
namespace="second_namespace",
635-
configs=[
636-
VariantFeatureConfig(
637-
name="bar",
638-
values=[
639-
"v3",
640-
"v4",
641-
],
642-
multi_value=False,
643-
),
644-
],
645-
),
646613
"private": ProviderConfig(
647614
namespace="private",
648615
configs=[
@@ -658,7 +625,7 @@ def test_package_defined_properties(include_build_plugins: bool) -> None:
658625
),
659626
}
660627

661-
if include_build_plugins:
628+
if include_aot_plugins:
662629
namespaces.add("second_namespace")
663630
# Note: technically a plugin returning a different value is not a valid use.
664631
# However, here it is used to verify that the correct code path is used.
@@ -675,12 +642,10 @@ def test_package_defined_properties(include_build_plugins: bool) -> None:
675642
],
676643
)
677644

678-
with PluginLoader(
679-
variant_info, include_build_plugins=include_build_plugins
680-
) as loader:
645+
with PluginLoader(variant_info, include_aot_plugins=include_aot_plugins) as loader:
681646
assert set(loader.namespaces) == namespaces
682647
assert loader.get_supported_configs() == configs
683-
if include_build_plugins:
648+
if include_aot_plugins:
684649
configs["test_namespace"].configs[0].values.extend(["val1c", "val1d"])
685650
configs["second_namespace"].configs[0].values.extend(["val3b", "val3c"])
686651

tests/test_api.py

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,11 @@
3131
from variantlib.constants import VARIANT_INFO_PROPERTY_KEY
3232
from variantlib.constants import VARIANT_INFO_PROVIDER_DATA_KEY
3333
from variantlib.constants import VARIANT_INFO_PROVIDER_ENABLE_IF_KEY
34+
from variantlib.constants import VARIANT_INFO_PROVIDER_INSTALL_TIME_KEY
3435
from variantlib.constants import VARIANT_INFO_PROVIDER_OPTIONAL_KEY
3536
from variantlib.constants import VARIANT_INFO_PROVIDER_PLUGIN_API_KEY
36-
from variantlib.constants import VARIANT_INFO_PROVIDER_PLUGIN_USE_KEY
3737
from variantlib.constants import VARIANT_INFO_PROVIDER_REQUIRES_KEY
38+
from variantlib.constants import VARIANT_INFO_STATIC_PROPERTIES_KEY
3839
from variantlib.constants import VARIANT_LABEL_LENGTH
3940
from variantlib.constants import VARIANTS_JSON_SCHEMA_KEY
4041
from variantlib.constants import VARIANTS_JSON_SCHEMA_URL
@@ -51,7 +52,6 @@
5152
from variantlib.models.variant import VariantFeature
5253
from variantlib.models.variant import VariantProperty
5354
from variantlib.models.variant import VariantValidationResult
54-
from variantlib.models.variant_info import PluginUse
5555
from variantlib.models.variant_info import ProviderInfo
5656
from variantlib.models.variant_info import VariantInfo
5757
from variantlib.pyproject_toml import VariantPyProjectToml
@@ -295,10 +295,6 @@ def test_validate_variant(optional: bool) -> None:
295295
"incompatible_namespace",
296296
"private",
297297
],
298-
feature_priorities={
299-
"private": ["build_type"],
300-
},
301-
property_priorities={"private": {"build_type": ["debug", "release"]}},
302298
providers={
303299
"test_namespace": ProviderInfo(
304300
requires=["variantlib"],
@@ -309,7 +305,7 @@ def test_validate_variant(optional: bool) -> None:
309305
requires=["variantlib"],
310306
plugin_api="tests.mocked_plugins:MockedPluginB",
311307
optional=optional,
312-
plugin_use=PluginUse.BUILD,
308+
install_time=False,
313309
),
314310
"incompatible_namespace": ProviderInfo(
315311
requires=["variantlib"],
@@ -318,11 +314,11 @@ def test_validate_variant(optional: bool) -> None:
318314
),
319315
"private": ProviderInfo(
320316
plugin_api="donotuseme",
321-
requires=["donotuseme"],
322317
optional=optional,
323-
plugin_use=PluginUse.NONE,
318+
install_time=False,
324319
),
325320
},
321+
static_properties={"private": {"build_type": ["debug", "release"]}},
326322
)
327323

328324
expected = {
@@ -399,13 +395,17 @@ def test_make_variant_dist_info(
399395
],
400396
VARIANT_INFO_PROVIDER_PLUGIN_API_KEY: "ns2_provider:Plugin",
401397
VARIANT_INFO_PROVIDER_OPTIONAL_KEY: True,
402-
VARIANT_INFO_PROVIDER_PLUGIN_USE_KEY: "build",
398+
VARIANT_INFO_PROVIDER_INSTALL_TIME_KEY: False,
399+
},
400+
"ns3": {
401+
VARIANT_INFO_PROVIDER_INSTALL_TIME_KEY: False,
403402
},
404403
}
405404
)
406405
expected[VARIANT_INFO_DEFAULT_PRIO_KEY].update(
407406
{
408-
VARIANT_INFO_NAMESPACE_KEY: ["ns1", "ns2"],
407+
VARIANT_INFO_NAMESPACE_KEY: ["ns1", "ns2", "ns3"],
408+
VARIANT_INFO_FEATURE_KEY: {"ns3": ["f2", "f1"]},
409409
},
410410
)
411411

@@ -415,6 +415,7 @@ def test_make_variant_dist_info(
415415
VARIANT_INFO_FEATURE_KEY: {
416416
"ns1": ["f2"],
417417
"ns2": ["f1", "f2"],
418+
"ns3": ["f2", "f1"],
418419
},
419420
VARIANT_INFO_PROPERTY_KEY: {
420421
"ns1": {
@@ -441,7 +442,7 @@ def test_make_variant_dist_info(
441442
if pyproject_toml is not None
442443
else None,
443444
variant_label=label,
444-
expand_build_plugin_properties=False,
445+
expand_aot_plugin_properties=False,
445446
)
446447
)
447448
== expected
@@ -683,9 +684,12 @@ def test_get_variant_label() -> None:
683684
)
684685

685686

686-
@pytest.mark.parametrize("plugin_use", PluginUse.__members__.values())
687-
def test_make_variant_dist_info_expand_build_plugin_properties(
688-
plugin_use: PluginUse,
687+
@pytest.mark.parametrize(
688+
("install_time", "requires"), [(False, False), (False, True), (True, True)]
689+
)
690+
def test_make_variant_dist_info_expand_aot_plugin_properties(
691+
install_time: bool,
692+
requires: bool,
689693
) -> None:
690694
vdesc = VariantDescription(
691695
[
@@ -697,10 +701,10 @@ def test_make_variant_dist_info_expand_build_plugin_properties(
697701
namespace_priorities=["aot_plugin"],
698702
providers={
699703
"aot_plugin": ProviderInfo(
700-
requires=["variantlib"],
701-
plugin_api=plugin_api,
704+
install_time=install_time,
702705
optional=True,
703-
plugin_use=plugin_use,
706+
plugin_api=plugin_api,
707+
requires=["variantlib"] if requires else [],
704708
)
705709
},
706710
)
@@ -712,7 +716,6 @@ def test_make_variant_dist_info_expand_build_plugin_properties(
712716
},
713717
VARIANT_INFO_PROVIDER_DATA_KEY: {
714718
"aot_plugin": {
715-
VARIANT_INFO_PROVIDER_REQUIRES_KEY: ["variantlib"],
716719
VARIANT_INFO_PROVIDER_OPTIONAL_KEY: True,
717720
VARIANT_INFO_PROVIDER_PLUGIN_API_KEY: plugin_api,
718721
},
@@ -726,18 +729,16 @@ def test_make_variant_dist_info_expand_build_plugin_properties(
726729
},
727730
}
728731

729-
if plugin_use == PluginUse.NONE:
730-
expected[VARIANT_INFO_PROVIDER_DATA_KEY]["aot_plugin"][
731-
VARIANT_INFO_PROVIDER_PLUGIN_USE_KEY
732-
] = "none"
733-
if plugin_use == PluginUse.BUILD:
734-
expected[VARIANT_INFO_PROVIDER_DATA_KEY]["aot_plugin"][
735-
VARIANT_INFO_PROVIDER_PLUGIN_USE_KEY
736-
] = "build"
732+
provider_data = expected[VARIANT_INFO_PROVIDER_DATA_KEY]["aot_plugin"]
733+
if requires:
734+
provider_data[VARIANT_INFO_PROVIDER_REQUIRES_KEY] = ["variantlib"]
735+
if not install_time:
736+
provider_data[VARIANT_INFO_PROVIDER_INSTALL_TIME_KEY] = False
737+
if requires and not install_time:
737738
expected[VARIANT_INFO_DEFAULT_PRIO_KEY][VARIANT_INFO_FEATURE_KEY] = {
738739
"aot_plugin": ["name1", "name2"],
739740
}
740-
expected[VARIANT_INFO_DEFAULT_PRIO_KEY][VARIANT_INFO_PROPERTY_KEY] = {
741+
expected[VARIANT_INFO_STATIC_PROPERTIES_KEY] = {
741742
"aot_plugin": {
742743
"name1": ["val1a", "val1b"],
743744
"name2": ["val2a", "val2b", "val2c"],
@@ -750,7 +751,7 @@ def test_make_variant_dist_info_expand_build_plugin_properties(
750751
vdesc,
751752
variant_info=vinfo,
752753
variant_label="test",
753-
expand_build_plugin_properties=True,
754+
expand_aot_plugin_properties=True,
754755
)
755756
)
756757
== expected
@@ -771,7 +772,7 @@ def test_make_variant_dist_info_invalid_aot_plugin_property() -> None:
771772
requires=["variantlib"],
772773
plugin_api=plugin_api,
773774
optional=True,
774-
plugin_use=PluginUse.BUILD,
775+
install_time=False,
775776
)
776777
},
777778
)
@@ -784,7 +785,7 @@ def test_make_variant_dist_info_invalid_aot_plugin_property() -> None:
784785
make_variant_dist_info(
785786
vdesc,
786787
variant_info=vinfo,
787-
expand_build_plugin_properties=True,
788+
expand_aot_plugin_properties=True,
788789
)
789790

790791

@@ -802,7 +803,7 @@ def test_make_variant_dist_info_invalid_aot_plugin_multi_value() -> None:
802803
requires=["variantlib"],
803804
plugin_api=plugin_api,
804805
optional=True,
805-
plugin_use=PluginUse.BUILD,
806+
install_time=False,
806807
)
807808
},
808809
)
@@ -814,7 +815,7 @@ def test_make_variant_dist_info_invalid_aot_plugin_multi_value() -> None:
814815
make_variant_dist_info(
815816
vdesc,
816817
variant_info=vinfo,
817-
expand_build_plugin_properties=True,
818+
expand_aot_plugin_properties=True,
818819
)
819820

820821

@@ -831,7 +832,7 @@ def test_make_variant_dist_info_really_invalid_build_plugin() -> None:
831832
"second_namespace": ProviderInfo(
832833
requires=["variantlib"],
833834
plugin_api=plugin_api,
834-
plugin_use=PluginUse.BUILD,
835+
install_time=False,
835836
)
836837
},
837838
)
@@ -844,5 +845,5 @@ def test_make_variant_dist_info_really_invalid_build_plugin() -> None:
844845
make_variant_dist_info(
845846
vdesc,
846847
variant_info=vinfo,
847-
expand_build_plugin_properties=True,
848+
expand_aot_plugin_properties=True,
848849
)

0 commit comments

Comments
 (0)