In addition to running a plug-in once for every instance as in the previous example, it can sometimes be useful to define "classes" of instances that a common set of plug-ins can operate on.
Here, a "class of instances" is known as a
family and a plug-in may support one or more
families, which is another requirement attribute, like
import pyblish.apiitems = ["john.person", "door.prop"]class CollectInstances(pyblish.api.ContextPlugin):order = 0def process(self, context):for item in items:name, suffix = item.split(".")instance = context.create_instance(name)instance.data["families"] = [suffix]class PrintPersons(pyblish.api.InstancePlugin):order = 1families = ["person"]def process(self, instance):print("Person is: %s" % instance)class PrintProps(pyblish.api.InstancePlugin):order = 1families = ["prop"]def process(self, instance):print("The prop is: %s" % instance)pyblish.api.register_plugin(CollectInstances)pyblish.api.register_plugin(PrintPersons)pyblish.api.register_plugin(PrintProps)import pyblish.utilpyblish.util.publish()# The person is "john"# The prop is "door"
If you pay special attention to the final output, you can see that "john" was processed by
PrintPersons, whereas "door" got processed by