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
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