예제 #1
0
def test_iterator():
    """Iterator skips inactive plug-ins and instances"""

    count = {"#": 0}

    class MyCollector(api.ContextPlugin):
        order = api.CollectorOrder

        def process(self, context):
            inactive = context.create_instance("Inactive")
            active = context.create_instance("Active")

            inactive.data["publish"] = False
            active.data["publish"] = True

            count["#"] += 1

    class MyValidatorA(api.InstancePlugin):
        order = api.ValidatorOrder
        active = False

        def process(self, instance):
            count["#"] += 10

    class MyValidatorB(api.InstancePlugin):
        order = api.ValidatorOrder

        def process(self, instance):
            count["#"] += 100

    context = api.Context()
    plugins = [MyCollector, MyValidatorA, MyValidatorB]

    assert count["#"] == 0, count

    for Plugin, instance in logic.Iterator(plugins, context):
        assert instance.name != "Inactive" if instance else True
        assert Plugin.__name__ != "MyValidatorA"

        plugin.process(Plugin, context, instance)

    # Collector runs once, one Validator runs once
    assert count["#"] == 101, count
예제 #2
0
def test_iterator_with_explicit_targets():
    """Iterator skips non-targeted plug-ins"""

    count = {"#": 0}

    class MyCollectorA(api.ContextPlugin):
        order = api.CollectorOrder
        targets = ["studio"]

        def process(self, context):
            count["#"] += 1

    class MyCollectorB(api.ContextPlugin):
        order = api.CollectorOrder

        def process(self, context):
            count["#"] += 10

    class MyCollectorC(api.ContextPlugin):
        order = api.CollectorOrder
        targets = ["studio"]

        def process(self, context):
            count["#"] += 100

    context = api.Context()
    plugins = [MyCollectorA, MyCollectorB, MyCollectorC]

    assert count["#"] == 0, count

    for Plugin, instance in logic.Iterator(
        plugins, context, targets=["studio"]
    ):
        assert Plugin.__name__ != "MyCollectorB"

        plugin.process(Plugin, context, instance)

    # Collector runs once, one Validator runs once
    assert count["#"] == 101, count