From 4ffa6c30ffa6331c3e3d696db4472fed68698df1 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 19 Mar 2021 16:57:26 +0100 Subject: [PATCH 1/4] feat(nuke): submit job with limit groups filtered per node class --- .../nuke/publish/submit_nuke_deadline.py | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/pype/plugins/nuke/publish/submit_nuke_deadline.py b/pype/plugins/nuke/publish/submit_nuke_deadline.py index aba51a2bb9a..91f532a8ac9 100644 --- a/pype/plugins/nuke/publish/submit_nuke_deadline.py +++ b/pype/plugins/nuke/publish/submit_nuke_deadline.py @@ -6,7 +6,7 @@ from avalon.vendor import requests import re import pyblish.api - +import nuke class NukeSubmitDeadline(pyblish.api.InstancePlugin): """Submit write to Deadline @@ -29,6 +29,7 @@ class NukeSubmitDeadline(pyblish.api.InstancePlugin): deadline_pool_secondary = "" deadline_group = "" deadline_department = "" + deadline_limit_groups = {} env_overrides = {} def process(self, instance): @@ -177,7 +178,10 @@ def payload_submit(self, # Optional, enable double-click to preview rendered # frames from Deadline Monitor - "OutputFilename0": output_filename_0.replace("\\", "/") + "OutputFilename0": output_filename_0.replace("\\", "/"), + + # limiting groups + "LimitGroups": self.get_limiting_group_filter() }, "PluginInfo": { @@ -352,3 +356,23 @@ def expected_files(self, for i in range(self._frame_start, (self._frame_end + 1)): instance.data["expectedFiles"].append( os.path.join(dir, (file % i)).replace("\\", "/")) + + def get_limiting_group_filter(self): + """Search for limit group nodes and return group name. + + Limit groups will be defined as pairs in Nuke deadline submitter + presents where the key will be name of limit group and value will be + a list of plugin's node class names. Thus, when a plugin uses more + than one node, these will be captured and the triggered process + will add the appropriate limit group to the payload jobinfo attributes. + """ + captured_groups = [] + for lg_name, list_node_class in self.deadline_limit_groups.items(): + for node_class in list_node_class: + for node in nuke.allNodes(recurseGroups=True): + if node.Class() not in node_class: + continue + if lg_name not in captured_groups: + captured_groups.append(lg_name) + + return ",".join(captured_groups) From 94d5decada3869793299bf4e5ede4daa448638be Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 19 Mar 2021 17:09:13 +0100 Subject: [PATCH 2/4] feat(nuke): improving doc-string and ignoring disabled nodes --- pype/plugins/nuke/publish/submit_nuke_deadline.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pype/plugins/nuke/publish/submit_nuke_deadline.py b/pype/plugins/nuke/publish/submit_nuke_deadline.py index 91f532a8ac9..9a692e8ce03 100644 --- a/pype/plugins/nuke/publish/submit_nuke_deadline.py +++ b/pype/plugins/nuke/publish/submit_nuke_deadline.py @@ -365,13 +365,21 @@ def get_limiting_group_filter(self): a list of plugin's node class names. Thus, when a plugin uses more than one node, these will be captured and the triggered process will add the appropriate limit group to the payload jobinfo attributes. + + Returning: + str: captured groups devided by comma and no space """ captured_groups = [] for lg_name, list_node_class in self.deadline_limit_groups.items(): for node_class in list_node_class: for node in nuke.allNodes(recurseGroups=True): + # ignore all nodes not member of defined class if node.Class() not in node_class: continue + # ignore all disabled nodes + if node["disable"].value(): + continue + # add group name if not already added if lg_name not in captured_groups: captured_groups.append(lg_name) From 1f5bd89f035bb7f2d6fb5285d053060ed3389429 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 22 Mar 2021 11:42:03 +0100 Subject: [PATCH 3/4] fix(nuke): PR suggestions --- pype/plugins/nuke/publish/submit_nuke_deadline.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pype/plugins/nuke/publish/submit_nuke_deadline.py b/pype/plugins/nuke/publish/submit_nuke_deadline.py index 9a692e8ce03..f33f6484171 100644 --- a/pype/plugins/nuke/publish/submit_nuke_deadline.py +++ b/pype/plugins/nuke/publish/submit_nuke_deadline.py @@ -147,6 +147,10 @@ def payload_submit(self, if not priority: priority = self.deadline_priority + # resolve any limit groups + limit_groups = self.get_limit_groups() + self.log.info("Limit groups: `{}`".format(limit_groups)) + payload = { "JobInfo": { # Top-level group name @@ -181,7 +185,7 @@ def payload_submit(self, "OutputFilename0": output_filename_0.replace("\\", "/"), # limiting groups - "LimitGroups": self.get_limiting_group_filter() + "LimitGroups": ",".join(limit_groups) }, "PluginInfo": { @@ -357,7 +361,7 @@ def expected_files(self, instance.data["expectedFiles"].append( os.path.join(dir, (file % i)).replace("\\", "/")) - def get_limiting_group_filter(self): + def get_limit_groups(self): """Search for limit group nodes and return group name. Limit groups will be defined as pairs in Nuke deadline submitter @@ -383,4 +387,4 @@ def get_limiting_group_filter(self): if lg_name not in captured_groups: captured_groups.append(lg_name) - return ",".join(captured_groups) + return captured_groups From 3a907e332efcea5c370ec25d9a58d0f700e66748 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 22 Mar 2021 13:33:47 +0100 Subject: [PATCH 4/4] fix(nuke): false info in doc string --- pype/plugins/nuke/publish/submit_nuke_deadline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pype/plugins/nuke/publish/submit_nuke_deadline.py b/pype/plugins/nuke/publish/submit_nuke_deadline.py index f33f6484171..08cbfc4d8e2 100644 --- a/pype/plugins/nuke/publish/submit_nuke_deadline.py +++ b/pype/plugins/nuke/publish/submit_nuke_deadline.py @@ -371,7 +371,7 @@ def get_limit_groups(self): will add the appropriate limit group to the payload jobinfo attributes. Returning: - str: captured groups devided by comma and no space + list: captured groups list """ captured_groups = [] for lg_name, list_node_class in self.deadline_limit_groups.items():