Bases: Action
Select invalid nodes in Fusion when plug-in failed.
To retrieve the invalid nodes this assumes a static get_invalid() method is available on the plugin. For an instance plug-in it is called with each errored instance, for a context plug-in with the context.
Source code in client/ayon_fusion/api/action.py
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 | class SelectInvalidAction(pyblish.api.Action):
"""Select invalid nodes in Fusion when plug-in failed.
To retrieve the invalid nodes this assumes a static `get_invalid()`
method is available on the plugin. For an instance plug-in it is called
with each errored instance, for a context plug-in with the context.
"""
label = "Select invalid"
on = "failed" # This action is only available on a failed plug-in
icon = "search" # Icon from Awesome Icon
def process(self, context, plugin):
# Get the invalid nodes for the plug-ins
self.log.info("Finding invalid nodes..")
if issubclass(plugin, pyblish.api.ContextPlugin):
# A context plug-in has no errored instances, instead it
# returns the invalid nodes for the context
sources = [context]
else:
sources = get_errored_instances_from_context(
context,
plugin=plugin,
)
invalid = list()
for source in sources:
invalid_nodes = plugin.get_invalid(source)
if invalid_nodes:
if isinstance(invalid_nodes, (list, tuple)):
invalid.extend(invalid_nodes)
else:
self.log.warning(
"Plug-in returned to be invalid, "
"but has no selectable nodes."
)
if not invalid:
# Assume relevant comp is current comp and clear selection
self.log.info("No invalid tools found.")
comp = get_current_comp()
flow = comp.CurrentFrame.FlowView
flow.Select() # No args equals clearing selection
return
# Assume a single comp
first_tool = invalid[0]
comp = first_tool.Comp()
flow = comp.CurrentFrame.FlowView
flow.Select() # No args equals clearing selection
names = set()
for tool in invalid:
flow.Select(tool, True)
comp.SetActiveTool(tool)
names.add(tool.Name)
self.log.info(
"Selecting invalid tools: %s" % ", ".join(sorted(names))
)
|