From 38eb8e0ae38169137316b57e90271c640b96420a Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 17 Jan 2024 11:31:29 +0000 Subject: [PATCH 1/6] initial working version --- .../plugins/publish/submit_nuke_deadline.py | 43 ++++++++++++------- .../defaults/project_settings/deadline.json | 2 + .../schema_project_deadline.json | 10 +++++ .../server/settings/publish_plugins.py | 3 ++ 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py b/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py index d03416ca002..ead22fe3021 100644 --- a/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py @@ -47,6 +47,7 @@ class NukeSubmitDeadline(pyblish.api.InstancePlugin, env_allowed_keys = [] env_search_replace_values = {} workfile_dependency = True + use_published_workfile = True @classmethod def get_attribute_defs(cls): @@ -85,8 +86,13 @@ def get_attribute_defs(cls): ), BoolDef( "workfile_dependency", - default=True, + default=cls.workfile_dependency, label="Workfile Dependency" + ), + BoolDef( + "use_published_workfile", + default=cls.use_published_workfile, + label="Use Published Workfile" ) ] @@ -125,20 +131,27 @@ def process(self, instance): render_path = instance.data['path'] script_path = context.data["currentFile"] - for item_ in context: - if "workfile" in item_.data["family"]: - template_data = item_.data.get("anatomyData") - rep = item_.data.get("representations")[0].get("name") - template_data["representation"] = rep - template_data["ext"] = rep - template_data["comment"] = None - anatomy_filled = context.data["anatomy"].format(template_data) - template_filled = anatomy_filled["publish"]["path"] - script_path = os.path.normpath(template_filled) - - self.log.info( - "Using published scene for render {}".format(script_path) - ) + use_published_workfile = instance.data["attributeValues"].get( + "use_published_workfile", self.use_published_workfile + ) + if use_published_workfile: + for item_ in context: + if "workfile" in item_.data["family"]: + template_data = item_.data.get("anatomyData") + rep = item_.data.get("representations")[0].get("name") + template_data["representation"] = rep + template_data["ext"] = rep + template_data["comment"] = None + anatomy_filled = context.data["anatomy"].format( + template_data + ) + template_filled = anatomy_filled["publish"]["path"] + script_path = os.path.normpath(template_filled) + self.log.info( + "Using published scene for render {}".format( + script_path + ) + ) # only add main rendering job if target is not frames_farm r_job_response_json = None diff --git a/openpype/settings/defaults/project_settings/deadline.json b/openpype/settings/defaults/project_settings/deadline.json index a19464a5c14..b02cfa82079 100644 --- a/openpype/settings/defaults/project_settings/deadline.json +++ b/openpype/settings/defaults/project_settings/deadline.json @@ -65,6 +65,8 @@ "group": "", "department": "", "use_gpu": true, + "workfile_dependency": true, + "use_published_workfile": true, "env_allowed_keys": [], "env_search_replace_values": {}, "limit_groups": {} diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_deadline.json b/openpype/settings/entities/schemas/projects_schema/schema_project_deadline.json index 1aea778e32e..42dea33ef9e 100644 --- a/openpype/settings/entities/schemas/projects_schema/schema_project_deadline.json +++ b/openpype/settings/entities/schemas/projects_schema/schema_project_deadline.json @@ -362,6 +362,16 @@ "key": "use_gpu", "label": "Use GPU" }, + { + "type": "boolean", + "key": "workfile_dependency", + "label": "Workfile Dependency" + }, + { + "type": "boolean", + "key": "use_published_workfile", + "label": "Use Published Workfile" + }, { "type": "list", "key": "env_allowed_keys", diff --git a/server_addon/deadline/server/settings/publish_plugins.py b/server_addon/deadline/server/settings/publish_plugins.py index a989f3ad9d4..8e44d8d47ff 100644 --- a/server_addon/deadline/server/settings/publish_plugins.py +++ b/server_addon/deadline/server/settings/publish_plugins.py @@ -161,6 +161,8 @@ class NukeSubmitDeadlineModel(BaseSettingsModel): group: str = Field(title="Group") department: str = Field(title="Department") use_gpu: bool = Field(title="Use GPU") + workfile_dependency: bool = Field(title="Workfile Dependency") + use_published_workfile: bool = Field(title="Use Published Workfile") env_allowed_keys: list[str] = Field( default_factory=list, @@ -382,6 +384,7 @@ class PublishPluginsModel(BaseSettingsModel): "group": "", "department": "", "use_gpu": True, + "workfile_dependency": True, "env_allowed_keys": [], "env_search_replace_values": [], "limit_groups": [] From acd61bef12f9580f3b1b1ed189b7864ed7623316 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 18 Jan 2024 12:15:10 +0000 Subject: [PATCH 2/6] Increment version --- server_addon/nuke/server/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_addon/nuke/server/version.py b/server_addon/nuke/server/version.py index 9cb17e79762..c49a95c3572 100644 --- a/server_addon/nuke/server/version.py +++ b/server_addon/nuke/server/version.py @@ -1 +1 @@ -__version__ = "0.1.8" +__version__ = "0.2.8" From 6591d883e495c7d5b6ac80da1085f556227d1859 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 18 Jan 2024 14:43:20 +0000 Subject: [PATCH 3/6] Correct version increment --- server_addon/deadline/server/version.py | 2 +- server_addon/nuke/server/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server_addon/deadline/server/version.py b/server_addon/deadline/server/version.py index 0a8da882586..01ef12070dc 100644 --- a/server_addon/deadline/server/version.py +++ b/server_addon/deadline/server/version.py @@ -1 +1 @@ -__version__ = "0.1.6" +__version__ = "0.2.6" diff --git a/server_addon/nuke/server/version.py b/server_addon/nuke/server/version.py index c49a95c3572..9cb17e79762 100644 --- a/server_addon/nuke/server/version.py +++ b/server_addon/nuke/server/version.py @@ -1 +1 @@ -__version__ = "0.2.8" +__version__ = "0.1.8" From 423df8d1fdaaf5742b8aad0a7002e98cdbe1daa9 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 18 Jan 2024 14:44:42 +0000 Subject: [PATCH 4/6] Fix settings defaults. --- server_addon/deadline/server/settings/publish_plugins.py | 1 + 1 file changed, 1 insertion(+) diff --git a/server_addon/deadline/server/settings/publish_plugins.py b/server_addon/deadline/server/settings/publish_plugins.py index 8e44d8d47ff..9fc8d4a6b75 100644 --- a/server_addon/deadline/server/settings/publish_plugins.py +++ b/server_addon/deadline/server/settings/publish_plugins.py @@ -385,6 +385,7 @@ class PublishPluginsModel(BaseSettingsModel): "department": "", "use_gpu": True, "workfile_dependency": True, + "use_published_workfile": True, "env_allowed_keys": [], "env_search_replace_values": [], "limit_groups": [] From 5761c4e5d00147eacf77bd275be12c007684912f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Je=C5=BEek?= Date: Thu, 18 Jan 2024 16:15:31 +0100 Subject: [PATCH 5/6] Update server_addon/deadline/server/version.py --- server_addon/deadline/server/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_addon/deadline/server/version.py b/server_addon/deadline/server/version.py index 6cd38b74659..9cb17e79762 100644 --- a/server_addon/deadline/server/version.py +++ b/server_addon/deadline/server/version.py @@ -1 +1 @@ -__version__ = "0.2.7" +__version__ = "0.1.8" From b0484e6dab9767cc1ea8ffa044ba53a9127bf037 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 23 Jan 2024 12:02:31 +0000 Subject: [PATCH 6/6] Refactor getting published workfile path --- .../plugins/publish/submit_nuke_deadline.py | 56 +++++++++++++------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py b/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py index ead22fe3021..746b009255f 100644 --- a/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_nuke_deadline.py @@ -135,23 +135,7 @@ def process(self, instance): "use_published_workfile", self.use_published_workfile ) if use_published_workfile: - for item_ in context: - if "workfile" in item_.data["family"]: - template_data = item_.data.get("anatomyData") - rep = item_.data.get("representations")[0].get("name") - template_data["representation"] = rep - template_data["ext"] = rep - template_data["comment"] = None - anatomy_filled = context.data["anatomy"].format( - template_data - ) - template_filled = anatomy_filled["publish"]["path"] - script_path = os.path.normpath(template_filled) - self.log.info( - "Using published scene for render {}".format( - script_path - ) - ) + script_path = self._get_published_workfile_path(context) # only add main rendering job if target is not frames_farm r_job_response_json = None @@ -210,6 +194,44 @@ def process(self, instance): families.insert(0, "prerender") instance.data["families"] = families + def _get_published_workfile_path(self, context): + """This method is temporary while the class is not inherited from + AbstractSubmitDeadline""" + for instance in context: + if ( + instance.data["family"] != "workfile" + # Disabled instances won't be integrated + or instance.data("publish") is False + ): + continue + template_data = instance.data["anatomyData"] + # Expect workfile instance has only one representation + representation = instance.data["representations"][0] + # Get workfile extension + repre_file = representation["files"] + self.log.info(repre_file) + ext = os.path.splitext(repre_file)[1].lstrip(".") + + # Fill template data + template_data["representation"] = representation["name"] + template_data["ext"] = ext + template_data["comment"] = None + + anatomy = context.data["anatomy"] + # WARNING Hardcoded template name 'publish' > may not be used + template_obj = anatomy.templates_obj["publish"]["path"] + + template_filled = template_obj.format(template_data) + script_path = os.path.normpath(template_filled) + self.log.info( + "Using published scene for render {}".format( + script_path + ) + ) + return script_path + + return None + def payload_submit( self, instance,