Family data

When building extensions like pyblish-ftrack and pyblish-deadline we rely on certain data to be present, like deadlineData and ftrackData.

With the latest update (coming soon) to pyblish-deadline instead of relying on the data member deadlineData to be present, we are relying on families which is more Pyblishic. The extension though is still depending on certain data to be present, and so you have to make sure that both the family and the data member (deadlineData) is present.

What if the family item could hold data as well?
Since the instance is processed based on families, the data would be in the “right” place like; instance.data["families"]["deadline"]["some_data"].

This is a very spontaneous brainwave, and might very well be fundamentally flawed but thought I would throw it out there.

Spontaneous ideas are good!

I think what you’re thinking of is the “contract” or “API” towards these packages, and there should definitely be one and it should definitely be bound to the family, but perhaps not as physically part of it (breaks backwards compatibility :frowning:).

Maybe globally storing this contract along these lines?

import my_pipeline  # or import pyblish_my_extension

contract = my_pipeline.contract["my_family"]
assert type(contract) is dict

Where your plug-ins then draw assumptions based on it, such as how to format paths and what not.

We rely on instances having different data. Do you mean that the “contract” is a representation of the expected data structure?