Thanks for the request, @BigRoy. We’ve mentioned it in the past, but I think it’s time we lay it out and get a proper sense of what it really is.
Implementation
I think we’ve already got a rather solid example of this from your comment in the Feedback Plug-ins issue. Something like this.
class RepairAction(pyblish.Action):
pass
class FeedbackAction(pyblish.Action):
pass
class ValidateInstances(pyblish.Validator):
def __init__(self):
self.add_action(RepairAction)
self.add_action(FeedbackAction)
Alternatively, to keep it in line with other additions to plug-ins, maybe this is preferable.
class ValidateInstances(pyblish.Validator):
actions = [RepairAction, FeedbackAction]
It sounds to me like what that separates Action
's from other plug-ins is that Action
's are interactive. Meaning they are never run on their own accord but must be run by a human or otherwise intentional manner, like a script.
My thoughts
About implementing this request, because it means pivoting Pyblish in a direction it was never meant to go, I feel the need to clarify a few things.
I’ve generally been opposed to the idea of widening Pyblish beyond SVEC. Primarily because I believe in it to be capable of encompassing every need - something that has yet to be disproved.
The future I see is one where SVEC is commonplace. When something is commonplace it means we can discuss it, perfect it. Something we are already doing, both here and in the chat. And even though SVEC may not ever be perfect, it is to our advantage to bend, adapt and work around it’s limitations instead of going solo, for the single purpose of having access to a common vocabulary.
To me, that is far greater than a perfect implementation or individual technology.
Having said that, and having listened to your feedback, I’ve also started coming around to an alternative route for getting there. A way in which SVEC is built on-top of the core API, instead of within it.
Before After
________________________ _______________ ________
| | | | |
| Customisation | | Customisation | SVEC |
|________________________| |_______________|________|
________________________ ________________________
| | | |
| API, SVEC | | API |
|________________________| |________________________|
It means that SVEC can continue to flourish without obstacles and also that alternative - possibly better - systems can be implemented, such as Action
's. It also puts SVEC to the test in the sense that developers can on their own accord discover the reason for it’s existence. Experience why there is features such as Instance
's and a Context
, why there is a need for the family
attribute. And finally, if it turns out that there is a better system than SVEC, it means Pyblish is able to welcome it.
Related