API
1.6
1.6
  • Introduction
  • Plug-in System
  • Data
    • result
    • Events
    • Targets
  • Environment Variables
    • PYBLISHPLUGINPATH
    • PYBLISH_CLIENT_PORT
    • PYBLISH_ALLOW_DUPLICATE_PLUGINS
    • PYBLISH_GUI
    • PYBLISH_EARLY_ADOPTER
    • PYBLISH_STRICT_DATATYPES
  • Ordering
    • CollectorOrder
    • ValidatorOrder
    • ExtractorOrder
    • IntegratorOrder
  • pyblish.util
    • publish
    • collect
    • validate
    • extract
    • integrate
  • pyblish.cli
    • publish
  • pyblish.api
    • AbstractEntity
      • .data
    • Context
      • .append
      • .create_instance
    • Instance
      • .append
      • .context
    • Plugin
      • .hosts
      • .families
      • .label
      • .active
      • .order
      • .optional
      • .requires
      • .actions
      • .version
      • .match
    • ContextPlugin
      • .process
    • InstancePlugin
      • .process
    • Action
      • .process
      • .icon
      • .on
    • Category
    • Separator
    • discover
    • sort
    • register_gui
    • register_host
Powered by GitBook
On this page
  • Introduction
  • Usage

Was this helpful?

  1. pyblish.api
  2. Plugin

.match

Control how families are matched amongst plug-ins and instances.

Source

Added

Introduction

The way instances are associated with plug-ins are via their families.

Instances and plug-ins may support one or more families, and instances matching one or more of these families are said to be associated with it.

An instance may be associated via a plug-in in 1 of 3 ways.

  1. Intersection

  2. Subset

  3. Exact

By default, an instance of any family within the supported families of a plug-in is a match. This is called Intersection and stems from basic set theory.

assert set(["a", "b"]).intersection(["b", "c"])

This is useful in the most general case, of one plug-in supporting many different - possibly unrelated - families. Such as one plug-in supporting both models and rigs, say for an established naming convention across both families.

Subset on the other hand means the families of an Instance must be a subset of the supported families of any plug-in.

Again the concept is borrowed from set theory.

assert set(["a", "b"]).issubset(["a", "b", "c"])

This can be useful when instances are specialised, such as being a lowpoly family of a model, or animation family of a rig.

Finally, there is Exact which captures edge-cases or otherwise highly context sensitive instances, such as an animation rig in shot05.

The algorithm is as follows.

assert set(["a", "b"]) == set(["b", "a"])

Usage

Decide whether your plug-in targets many unrelated families, or specialises in a few, then associate an algorithm with this plug-in.

Example

In this example, SpecificPlugin is associated to instances whose family(ies) are a subset of the supported families model and low. If the instance does not have at least both of these, it is not a match.

This is different from GenericPlugin, where only one of the families of an instance need to match any of the supported families of a plug-in. This is called intersection.

from pyblish import api

class GenericPlugin(api.InstancePlugin):
  # Support both models and rigs
  families = ["model", "rig"]

  def process(self, instance):
    # Applies to both models and rigs
    assert "parent_GRP" in instance

class SpecificPlugin(api.InstancePlugin):
  # Support models, but only low-poly models
  families = ["model", "low"]
  match = api.Subset

  def process(self, instance):
    # Safe to assume it has a `polyCount` due
    # to only capturing models.
    assert instance.data["polyCount"] < 500

The last possible value is Exact which means an instance only matches when families of both instance and plug-ins match exactly.

class EdgeCasePlugin(api.InstancePlugin):
  families = ["model", "low", "level21"]
  match = api.Exact

  def process(self, instance):
    assert "specialMember" in instance
Previous.versionNextContextPlugin

Last updated 5 years ago

Was this helpful?

Link
1.4.3