From cd4adfefd27e51cd26422273b78d4f52e75d3f4d Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Tue, 5 Sep 2023 14:34:48 +0200 Subject: [PATCH 01/30] Remove Publish GUI Filter settings from Maya since new publisher doesn't support it --- .../defaults/project_settings/maya.json | 9 ----- .../projects_schema/schema_project_maya.json | 4 -- server_addon/maya/server/settings/main.py | 37 +------------------ 3 files changed, 1 insertion(+), 49 deletions(-) diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index 38f14ec022..d6c1a886f8 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -1564,14 +1564,5 @@ }, "templated_workfile_build": { "profiles": [] - }, - "filters": { - "preset 1": { - "ValidateNoAnimation": false, - "ValidateShapeDefaultNames": false - }, - "preset 2": { - "ValidateNoAnimation": false - } } } diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_maya.json b/openpype/settings/entities/schemas/projects_schema/schema_project_maya.json index dca955dab4..a6fd742b40 100644 --- a/openpype/settings/entities/schemas/projects_schema/schema_project_maya.json +++ b/openpype/settings/entities/schemas/projects_schema/schema_project_maya.json @@ -258,10 +258,6 @@ { "type": "schema", "name": "schema_templated_workfile_build" - }, - { - "type": "schema", - "name": "schema_publish_gui_filter" } ] } diff --git a/server_addon/maya/server/settings/main.py b/server_addon/maya/server/settings/main.py index c8021614be..f204401061 100644 --- a/server_addon/maya/server/settings/main.py +++ b/server_addon/maya/server/settings/main.py @@ -23,23 +23,6 @@ class ExtMappingItemModel(BaseSettingsModel): value: str = Field(title="Extension") -class PublishGUIFilterItemModel(BaseSettingsModel): - _layout = "compact" - name: str = Field(title="Name") - value: bool = Field(True, title="Active") - - -class PublishGUIFiltersModel(BaseSettingsModel): - _layout = "compact" - name: str = Field(title="Name") - value: list[PublishGUIFilterItemModel] = Field(default_factory=list) - - @validator("value") - def validate_unique_outputs(cls, value): - ensure_unique_names(value) - return value - - class MayaSettings(BaseSettingsModel): """Maya Project Settings.""" @@ -76,9 +59,6 @@ class MayaSettings(BaseSettingsModel): templated_workfile_build: TemplatedProfilesModel = Field( default_factory=TemplatedProfilesModel, title="Templated Workfile Build Settings") - filters: list[PublishGUIFiltersModel] = Field( - default_factory=list, - title="Publish GUI Filters") @validator("filters", "ext_mapping") def validate_unique_outputs(cls, value): @@ -122,20 +102,5 @@ DEFAULT_MAYA_SETTING = { "publish": DEFAULT_PUBLISH_SETTINGS, "load": DEFAULT_LOADERS_SETTING, "workfile_build": DEFAULT_WORKFILE_SETTING, - "templated_workfile_build": DEFAULT_TEMPLATED_WORKFILE_SETTINGS, - "filters": [ - { - "name": "preset 1", - "value": [ - {"name": "ValidateNoAnimation", "value": False}, - {"name": "ValidateShapeDefaultNames", "value": False}, - ] - }, - { - "name": "preset 2", - "value": [ - {"name": "ValidateNoAnimation", "value": False}, - ] - }, - ] + "templated_workfile_build": DEFAULT_TEMPLATED_WORKFILE_SETTINGS } From 15631e7ba85c6aeef7defddae103805bc780ccb3 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Tue, 5 Sep 2023 14:35:25 +0200 Subject: [PATCH 02/30] Bump Ayon Maya server addon version due to new settings definition --- server_addon/maya/server/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_addon/maya/server/version.py b/server_addon/maya/server/version.py index e57ad00718..de699158fd 100644 --- a/server_addon/maya/server/version.py +++ b/server_addon/maya/server/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring addon version.""" -__version__ = "0.1.3" +__version__ = "0.1.4" From 412b6b480d45434dc6895dae9b7efec2df421a85 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Tue, 5 Sep 2023 14:35:58 +0200 Subject: [PATCH 03/30] Remove Publish GUI Filter settings from Nuke since new publisher doesn't support it --- .../defaults/project_settings/nuke.json | 3 +-- .../projects_schema/schema_project_nuke.json | 4 ---- server_addon/nuke/server/settings/filters.py | 19 ------------------- server_addon/nuke/server/settings/main.py | 8 +------- 4 files changed, 2 insertions(+), 32 deletions(-) delete mode 100644 server_addon/nuke/server/settings/filters.py diff --git a/openpype/settings/defaults/project_settings/nuke.json b/openpype/settings/defaults/project_settings/nuke.json index b736c462ff..8b77251956 100644 --- a/openpype/settings/defaults/project_settings/nuke.json +++ b/openpype/settings/defaults/project_settings/nuke.json @@ -552,6 +552,5 @@ }, "templated_workfile_build": { "profiles": [] - }, - "filters": {} + } } diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json b/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json index 6b516ddf4a..0b24c8231c 100644 --- a/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json +++ b/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json @@ -291,10 +291,6 @@ { "type": "schema", "name": "schema_templated_workfile_build" - }, - { - "type": "schema", - "name": "schema_publish_gui_filter" } ] } diff --git a/server_addon/nuke/server/settings/filters.py b/server_addon/nuke/server/settings/filters.py deleted file mode 100644 index 7e2702b3b7..0000000000 --- a/server_addon/nuke/server/settings/filters.py +++ /dev/null @@ -1,19 +0,0 @@ -from pydantic import Field, validator -from ayon_server.settings import BaseSettingsModel, ensure_unique_names - - -class PublishGUIFilterItemModel(BaseSettingsModel): - _layout = "compact" - name: str = Field(title="Name") - value: bool = Field(True, title="Active") - - -class PublishGUIFiltersModel(BaseSettingsModel): - _layout = "compact" - name: str = Field(title="Name") - value: list[PublishGUIFilterItemModel] = Field(default_factory=list) - - @validator("value") - def validate_unique_outputs(cls, value): - ensure_unique_names(value) - return value diff --git a/server_addon/nuke/server/settings/main.py b/server_addon/nuke/server/settings/main.py index 4687d48ac9..f7ce2d044d 100644 --- a/server_addon/nuke/server/settings/main.py +++ b/server_addon/nuke/server/settings/main.py @@ -44,7 +44,6 @@ from .workfile_builder import ( from .templated_workfile_build import ( TemplatedWorkfileBuildModel ) -from .filters import PublishGUIFilterItemModel class NukeSettings(BaseSettingsModel): @@ -100,10 +99,6 @@ class NukeSettings(BaseSettingsModel): default_factory=TemplatedWorkfileBuildModel ) - filters: list[PublishGUIFilterItemModel] = Field( - default_factory=list - ) - @validator("filters") def ensure_unique_names(cls, value): """Ensure name fields within the lists have unique names.""" @@ -123,6 +118,5 @@ DEFAULT_VALUES = { "workfile_builder": DEFAULT_WORKFILE_BUILDER_SETTINGS, "templated_workfile_build": { "profiles": [] - }, - "filters": [] + } } From 7850fd01b037a49e4c00ddbc4c734da7e3ac6a9d Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Tue, 5 Sep 2023 14:36:20 +0200 Subject: [PATCH 04/30] Bump Ayon Nuke server addon version due to new settings definition --- 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 b3f4756216..ae7362549b 100644 --- a/server_addon/nuke/server/version.py +++ b/server_addon/nuke/server/version.py @@ -1 +1 @@ -__version__ = "0.1.2" +__version__ = "0.1.3" From 823250f427a21895e4a09c36a333b8921cbd3d29 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:31:51 +0200 Subject: [PATCH 05/30] Remove publish gui filter setting from TV Paint --- .../schema_project_tvpaint.json | 4 --- server_addon/tvpaint/server/settings/main.py | 27 +------------------ 2 files changed, 1 insertion(+), 30 deletions(-) diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_tvpaint.json b/openpype/settings/entities/schemas/projects_schema/schema_project_tvpaint.json index e9255f426e..5b2647bc6d 100644 --- a/openpype/settings/entities/schemas/projects_schema/schema_project_tvpaint.json +++ b/openpype/settings/entities/schemas/projects_schema/schema_project_tvpaint.json @@ -436,10 +436,6 @@ "workfile_builder/builder_on_start", "workfile_builder/profiles" ] - }, - { - "type": "schema", - "name": "schema_publish_gui_filter" } ] } diff --git a/server_addon/tvpaint/server/settings/main.py b/server_addon/tvpaint/server/settings/main.py index 4cd6ac4b1a..102acfaf3d 100644 --- a/server_addon/tvpaint/server/settings/main.py +++ b/server_addon/tvpaint/server/settings/main.py @@ -1,4 +1,4 @@ -from pydantic import Field, validator +from pydantic import Field from ayon_server.settings import ( BaseSettingsModel, ensure_unique_names, @@ -14,23 +14,6 @@ from .publish_plugins import ( ) -class PublishGUIFilterItemModel(BaseSettingsModel): - _layout = "compact" - name: str = Field(title="Name") - value: bool = Field(True, title="Active") - - -class PublishGUIFiltersModel(BaseSettingsModel): - _layout = "compact" - name: str = Field(title="Name") - value: list[PublishGUIFilterItemModel] = Field(default_factory=list) - - @validator("value") - def validate_unique_outputs(cls, value): - ensure_unique_names(value) - return value - - class TvpaintSettings(BaseSettingsModel): imageio: TVPaintImageIOModel = Field( default_factory=TVPaintImageIOModel, @@ -52,14 +35,6 @@ class TvpaintSettings(BaseSettingsModel): default_factory=WorkfileBuilderPlugin, title="Workfile Builder" ) - filters: list[PublishGUIFiltersModel] = Field( - default_factory=list, - title="Publish GUI Filters") - - @validator("filters") - def validate_unique_outputs(cls, value): - ensure_unique_names(value) - return value DEFAULT_VALUES = { From e4535c32504c5e44a92ca8140386e97816e7344c Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:32:28 +0200 Subject: [PATCH 06/30] Remove remaining traces of `filters` in Maya and Nuke server addons --- server_addon/maya/server/settings/main.py | 2 +- server_addon/nuke/server/settings/main.py | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/server_addon/maya/server/settings/main.py b/server_addon/maya/server/settings/main.py index f204401061..be123e5c38 100644 --- a/server_addon/maya/server/settings/main.py +++ b/server_addon/maya/server/settings/main.py @@ -60,7 +60,7 @@ class MayaSettings(BaseSettingsModel): default_factory=TemplatedProfilesModel, title="Templated Workfile Build Settings") - @validator("filters", "ext_mapping") + @validator("ext_mapping") def validate_unique_outputs(cls, value): ensure_unique_names(value) return value diff --git a/server_addon/nuke/server/settings/main.py b/server_addon/nuke/server/settings/main.py index f1e9b6774e..b6729e7c2f 100644 --- a/server_addon/nuke/server/settings/main.py +++ b/server_addon/nuke/server/settings/main.py @@ -97,12 +97,6 @@ class NukeSettings(BaseSettingsModel): default_factory=TemplatedWorkfileBuildModel ) - @validator("filters") - def ensure_unique_names(cls, value): - """Ensure name fields within the lists have unique names.""" - ensure_unique_names(value) - return value - DEFAULT_VALUES = { "general": DEFAULT_GENERAL_SETTINGS, From 1baec5503af8d814718dc785232e5308fbdb8ead Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:33:43 +0200 Subject: [PATCH 07/30] Remove remaining traces of `filters` in Nuke AYON settings conversion --- openpype/settings/ayon_settings.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/openpype/settings/ayon_settings.py b/openpype/settings/ayon_settings.py index d54d71e851..7e4ebcbcc0 100644 --- a/openpype/settings/ayon_settings.py +++ b/openpype/settings/ayon_settings.py @@ -694,16 +694,6 @@ def _convert_nuke_project_settings(ayon_settings, output): dirmap["paths"][dst_key] = dirmap["paths"].pop(src_key) ayon_nuke["nuke-dirmap"] = dirmap - # --- Filters --- - new_gui_filters = {} - for item in ayon_nuke.pop("filters"): - subvalue = {} - key = item["name"] - for subitem in item["value"]: - subvalue[subitem["name"]] = subitem["value"] - new_gui_filters[key] = subvalue - ayon_nuke["filters"] = new_gui_filters - # --- Load --- ayon_load = ayon_nuke["load"] ayon_load["LoadClip"]["_representations"] = ( From f3f3a4aadc5663ef457f88a897f65dfa906f1e99 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:34:01 +0200 Subject: [PATCH 08/30] Remove filters from tvpaint.json --- openpype/settings/defaults/project_settings/tvpaint.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openpype/settings/defaults/project_settings/tvpaint.json b/openpype/settings/defaults/project_settings/tvpaint.json index fdbd6d5d0f..d03b8b7227 100644 --- a/openpype/settings/defaults/project_settings/tvpaint.json +++ b/openpype/settings/defaults/project_settings/tvpaint.json @@ -107,6 +107,5 @@ "workfile_builder": { "create_first_version": false, "custom_templates": [] - }, - "filters": {} + } } From 864f043f071f14f6101c920688bf9e2c7e6a9e54 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:35:08 +0200 Subject: [PATCH 09/30] Bump TVPaint Server Addon patch version --- server_addon/tvpaint/server/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_addon/tvpaint/server/version.py b/server_addon/tvpaint/server/version.py index 3dc1f76bc6..485f44ac21 100644 --- a/server_addon/tvpaint/server/version.py +++ b/server_addon/tvpaint/server/version.py @@ -1 +1 @@ -__version__ = "0.1.0" +__version__ = "0.1.1" From 38958b2e2d8e4b78f2e774c31bc8f6b9e1602651 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:40:28 +0200 Subject: [PATCH 10/30] Bump Nuke Server Addon patch 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 ae7362549b..bbab0242f6 100644 --- a/server_addon/nuke/server/version.py +++ b/server_addon/nuke/server/version.py @@ -1 +1 @@ -__version__ = "0.1.3" +__version__ = "0.1.4" From 187b4087ec8486eaa4c4d4ab6d180dec26ef70e4 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 4 Dec 2023 15:39:19 +0000 Subject: [PATCH 11/30] Optional preserve references. --- openpype/hosts/maya/plugins/create/create_mayascene.py | 10 ++++++++++ .../maya/plugins/publish/extract_maya_scene_raw.py | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_mayascene.py b/openpype/hosts/maya/plugins/create/create_mayascene.py index b61c97aebf..c6bf1662a1 100644 --- a/openpype/hosts/maya/plugins/create/create_mayascene.py +++ b/openpype/hosts/maya/plugins/create/create_mayascene.py @@ -1,4 +1,5 @@ from openpype.hosts.maya.api import plugin +from openpype.lib import BoolDef class CreateMayaScene(plugin.MayaCreator): @@ -9,3 +10,12 @@ class CreateMayaScene(plugin.MayaCreator): label = "Maya Scene" family = "mayaScene" icon = "file-archive-o" + + def get_instance_attr_defs(self): + return [ + BoolDef( + "preserve_references", + label="Preserve References", + default=True + ) + ] diff --git a/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py b/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py index ab170fe48c..bfce0607e1 100644 --- a/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py +++ b/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py @@ -70,7 +70,9 @@ class ExtractMayaSceneRaw(publish.Extractor): force=True, typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary", # noqa: E501 exportSelected=True, - preserveReferences=True, + preserveReferences=instance.data.get( + "creator_attributes", {} + ).get("preserve_references", True), constructionHistory=True, shader=True, constraints=True, From 8bd8dc1af7213b925864c0e3f4ce04f52bc124a5 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 6 Dec 2023 08:05:39 +0000 Subject: [PATCH 12/30] Move to attribute defs --- .../maya/plugins/create/create_mayascene.py | 10 --------- .../plugins/publish/extract_maya_scene_raw.py | 21 ++++++++++++++++--- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_mayascene.py b/openpype/hosts/maya/plugins/create/create_mayascene.py index c6bf1662a1..b61c97aebf 100644 --- a/openpype/hosts/maya/plugins/create/create_mayascene.py +++ b/openpype/hosts/maya/plugins/create/create_mayascene.py @@ -1,5 +1,4 @@ from openpype.hosts.maya.api import plugin -from openpype.lib import BoolDef class CreateMayaScene(plugin.MayaCreator): @@ -10,12 +9,3 @@ class CreateMayaScene(plugin.MayaCreator): label = "Maya Scene" family = "mayaScene" icon = "file-archive-o" - - def get_instance_attr_defs(self): - return [ - BoolDef( - "preserve_references", - label="Preserve References", - default=True - ) - ] diff --git a/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py b/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py index bfce0607e1..94b4d6dc5f 100644 --- a/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py +++ b/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py @@ -6,6 +6,8 @@ from maya import cmds from openpype.hosts.maya.api.lib import maintained_selection from openpype.pipeline import AVALON_CONTAINER_ID, publish +from openpype.pipeline.publish import OpenPypePyblishPluginMixin +from openpype.lib import BoolDef class ExtractMayaSceneRaw(publish.Extractor): @@ -23,6 +25,16 @@ class ExtractMayaSceneRaw(publish.Extractor): "camerarig"] scene_type = "ma" + @classmethod + def get_attribute_defs(cls): + return [ + BoolDef( + "preserve_references", + label="Preserve References", + default=True + ) + ] + def process(self, instance): """Plugin entry point.""" ext_mapping = ( @@ -64,15 +76,18 @@ class ExtractMayaSceneRaw(publish.Extractor): # Perform extraction self.log.debug("Performing extraction ...") + attribute_values = self.get_attr_values_from_data( + instance.data + ) with maintained_selection(): cmds.select(selection, noExpand=True) cmds.file(path, force=True, typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary", # noqa: E501 exportSelected=True, - preserveReferences=instance.data.get( - "creator_attributes", {} - ).get("preserve_references", True), + preserveReferences=attribute_values[ + "preserve_references" + ], constructionHistory=True, shader=True, constraints=True, From a8d0c4f822d93ba0ebe69636a34198eb0ba8baad Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 6 Dec 2023 08:06:35 +0000 Subject: [PATCH 13/30] Mixin class --- openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py b/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py index 94b4d6dc5f..183dcd1fb3 100644 --- a/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py +++ b/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py @@ -10,7 +10,7 @@ from openpype.pipeline.publish import OpenPypePyblishPluginMixin from openpype.lib import BoolDef -class ExtractMayaSceneRaw(publish.Extractor): +class ExtractMayaSceneRaw(publish.Extractor, OpenPypePyblishPluginMixin): """Extract as Maya Scene (raw). This will preserve all references, construction history, etc. From 07c7b258f5452181c8d10af3bea1b61c6615d685 Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Wed, 6 Dec 2023 10:01:20 +0000 Subject: [PATCH 14/30] Update openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py Co-authored-by: Roy Nieterau --- .../hosts/maya/plugins/publish/extract_maya_scene_raw.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py b/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py index 183dcd1fb3..a4f313bdf9 100644 --- a/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py +++ b/openpype/hosts/maya/plugins/publish/extract_maya_scene_raw.py @@ -31,6 +31,12 @@ class ExtractMayaSceneRaw(publish.Extractor, OpenPypePyblishPluginMixin): BoolDef( "preserve_references", label="Preserve References", + tooltip=( + "When enabled references will still be references " + "in the published file.\nWhen disabled the references " + "are imported into the published file generating a " + "file without references." + ), default=True ) ] From bcdeec3461db61d535721c18d00c0e5c1264956d Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Fri, 8 Dec 2023 23:01:41 +0200 Subject: [PATCH 15/30] refactor get_output_parameter --- openpype/hosts/houdini/api/lib.py | 114 ++++++++++-------------------- 1 file changed, 36 insertions(+), 78 deletions(-) diff --git a/openpype/hosts/houdini/api/lib.py b/openpype/hosts/houdini/api/lib.py index 614052431f..e1a0c4310b 100644 --- a/openpype/hosts/houdini/api/lib.py +++ b/openpype/hosts/houdini/api/lib.py @@ -121,62 +121,6 @@ def get_id_required_nodes(): return list(nodes) -def get_export_parameter(node): - """Return the export output parameter of the given node - - Example: - root = hou.node("/obj") - my_alembic_node = root.createNode("alembic") - get_output_parameter(my_alembic_node) - # Result: "output" - - Args: - node(hou.Node): node instance - - Returns: - hou.Parm - - """ - node_type = node.type().description() - - # Ensures the proper Take is selected for each ROP to retrieve the correct - # ifd - try: - rop_take = hou.takes.findTake(node.parm("take").eval()) - if rop_take is not None: - hou.takes.setCurrentTake(rop_take) - except AttributeError: - # hou object doesn't always have the 'takes' attribute - pass - - if node_type == "Mantra" and node.parm("soho_outputmode").eval(): - return node.parm("soho_diskfile") - elif node_type == "Alfred": - return node.parm("alf_diskfile") - elif (node_type == "RenderMan" or node_type == "RenderMan RIS"): - pre_ris22 = node.parm("rib_outputmode") and \ - node.parm("rib_outputmode").eval() - ris22 = node.parm("diskfile") and node.parm("diskfile").eval() - if pre_ris22 or ris22: - return node.parm("soho_diskfile") - elif node_type == "Redshift" and node.parm("RS_archive_enable").eval(): - return node.parm("RS_archive_file") - elif node_type == "Wedge" and node.parm("driver").eval(): - return get_export_parameter(node.node(node.parm("driver").eval())) - elif node_type == "Arnold": - return node.parm("ar_ass_file") - elif node_type == "Alembic" and node.parm("use_sop_path").eval(): - return node.parm("sop_path") - elif node_type == "Shotgun Mantra" and node.parm("soho_outputmode").eval(): - return node.parm("sgtk_soho_diskfile") - elif node_type == "Shotgun Alembic" and node.parm("use_sop_path").eval(): - return node.parm("sop_path") - elif node.type().nameWithCategory() == "Driver/vray_renderer": - return node.parm("render_export_filepath") - - raise TypeError("Node type '%s' not supported" % node_type) - - def get_output_parameter(node): """Return the render output parameter of the given node @@ -184,7 +128,7 @@ def get_output_parameter(node): root = hou.node("/obj") my_alembic_node = root.createNode("alembic") get_output_parameter(my_alembic_node) - # Result: "output" + # Result: "filename" Args: node(hou.Node): node instance @@ -192,33 +136,47 @@ def get_output_parameter(node): Returns: hou.Parm + Note 1: + I'm using node.type().name() to get on par with the creators, + Because the return value of `node.type().name()` is the same string value used in creators + e.g. instance_data.update({"node_type": "alembic"}) + + Note 2: + Rop nodes in different network categories have the same output parameter. + So, I took that into consideration as a hint for future development. + """ - node_type = node.type().description() - category = node.type().category().name() + + node_type = node.type().name() # Figure out which type of node is being rendered - if node_type == "Geometry" or node_type == "Filmbox FBX" or \ - (node_type == "ROP Output Driver" and category == "Sop"): - return node.parm("sopoutput") - elif node_type == "Composite": - return node.parm("copoutput") - elif node_type == "opengl": - return node.parm("picture") - elif node_type == "arnold": - if node.evalParm("ar_ass_export_enable"): + if node_type == "alembic" or node_type == "rop_alembic": + return node.parm("filename") + elif node_type == "arnold": + if node_type.evalParm("ar_ass_export_enable"): return node.parm("ar_ass_file") - elif node_type == "Redshift_Proxy_Output": - return node.parm("RS_archive_file") - elif node_type == "ifd": + else: + return node.parm("ar_picture") + elif node_type == "geometry" or node_type == "rop_geometry" or node_type == "filmboxfbx" or node_type == "rop_fbx" : + return node.parm("sopoutput") + elif node_type == "comp": + return node.parm("copoutput") + elif node_type == "karma" or node_type == "opengl": + return node.parm("picture") + elif node_type == "ifd": # Matnra if node.evalParm("soho_outputmode"): return node.parm("soho_diskfile") - elif node_type == "Octane": - return node.parm("HO_img_fileName") - elif node_type == "Fetch": - inner_node = node.node(node.parm("source").eval()) - if inner_node: - return get_output_parameter(inner_node) - elif node.type().nameWithCategory() == "Driver/vray_renderer": + else: + return node.parm("vm_picture") + elif node_type == "Redshift_Proxy_Output": + return node.parm("RS_archive_file") + elif node_type == "Redshift_ROP": + return node.parm("RS_outputFileNamePrefix") + elif node_type == "usd" or node_type == "usd_rop" or node_type == "usdexport": + return node.parm("lopoutput") + elif node_type == "usdrender" or node_type == "usdrender_rop": + return node.parm("outputimage") + elif node_type == "vray_renderer": return node.parm("SettingsOutput_img_file_path") raise TypeError("Node type '%s' not supported" % node_type) From 91e80a1831d81bda0bd5f6de8df94678b08593d7 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Mon, 11 Dec 2023 13:05:00 +0200 Subject: [PATCH 16/30] resolve hound - fix lint problems --- openpype/hosts/houdini/api/lib.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/openpype/hosts/houdini/api/lib.py b/openpype/hosts/houdini/api/lib.py index e1a0c4310b..634535604d 100644 --- a/openpype/hosts/houdini/api/lib.py +++ b/openpype/hosts/houdini/api/lib.py @@ -138,11 +138,13 @@ def get_output_parameter(node): Note 1: I'm using node.type().name() to get on par with the creators, - Because the return value of `node.type().name()` is the same string value used in creators + Because the return value of `node.type().name()` is the same string + value used in creators e.g. instance_data.update({"node_type": "alembic"}) Note 2: - Rop nodes in different network categories have the same output parameter. + Rop nodes in different network categories have + the same output parameter. So, I took that into consideration as a hint for future development. """ @@ -152,12 +154,17 @@ def get_output_parameter(node): # Figure out which type of node is being rendered if node_type == "alembic" or node_type == "rop_alembic": return node.parm("filename") - elif node_type == "arnold": + elif node_type == "arnold": if node_type.evalParm("ar_ass_export_enable"): return node.parm("ar_ass_file") else: return node.parm("ar_picture") - elif node_type == "geometry" or node_type == "rop_geometry" or node_type == "filmboxfbx" or node_type == "rop_fbx" : + elif ( + node_type == "geometry" or + node_type == "rop_geometry" or + node_type == "filmboxfbx" or + node_type == "rop_fbx" + ): return node.parm("sopoutput") elif node_type == "comp": return node.parm("copoutput") @@ -172,7 +179,11 @@ def get_output_parameter(node): return node.parm("RS_archive_file") elif node_type == "Redshift_ROP": return node.parm("RS_outputFileNamePrefix") - elif node_type == "usd" or node_type == "usd_rop" or node_type == "usdexport": + elif ( + node_type == "usd" or + node_type == "usd_rop" or + node_type == "usdexport" + ): return node.parm("lopoutput") elif node_type == "usdrender" or node_type == "usdrender_rop": return node.parm("outputimage") From cb5fa7faa291b2d237a9ed5c10c0ddf496a05b2d Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Wed, 13 Dec 2023 19:02:15 +0200 Subject: [PATCH 17/30] Kuba's comments - Better code and doc string --- openpype/hosts/houdini/api/lib.py | 55 ++++++++++++++----------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/openpype/hosts/houdini/api/lib.py b/openpype/hosts/houdini/api/lib.py index 634535604d..39a7006ef4 100644 --- a/openpype/hosts/houdini/api/lib.py +++ b/openpype/hosts/houdini/api/lib.py @@ -128,64 +128,57 @@ def get_output_parameter(node): root = hou.node("/obj") my_alembic_node = root.createNode("alembic") get_output_parameter(my_alembic_node) - # Result: "filename" + >>> "filename" + + Notes: + I'm using node.type().name() to get on par with the creators, + Because the return value of `node.type().name()` is the + same string value used in creators + e.g. instance_data.update({"node_type": "alembic"}) + + Rop nodes in different network categories have + the same output parameter. + So, I took that into consideration as a hint for + future development. Args: node(hou.Node): node instance Returns: hou.Parm - - Note 1: - I'm using node.type().name() to get on par with the creators, - Because the return value of `node.type().name()` is the same string - value used in creators - e.g. instance_data.update({"node_type": "alembic"}) - - Note 2: - Rop nodes in different network categories have - the same output parameter. - So, I took that into consideration as a hint for future development. - """ node_type = node.type().name() # Figure out which type of node is being rendered - if node_type == "alembic" or node_type == "rop_alembic": + if node_type in {"alembic", "rop_alembic"}: return node.parm("filename") elif node_type == "arnold": if node_type.evalParm("ar_ass_export_enable"): return node.parm("ar_ass_file") - else: - return node.parm("ar_picture") - elif ( - node_type == "geometry" or - node_type == "rop_geometry" or - node_type == "filmboxfbx" or - node_type == "rop_fbx" - ): + return node.parm("ar_picture") + elif node_type in { + "geometry", + "rop_geometry", + "filmboxfbx", + "rop_fbx" + }: return node.parm("sopoutput") elif node_type == "comp": return node.parm("copoutput") - elif node_type == "karma" or node_type == "opengl": + elif node_type in {"karma", "opengl"}: return node.parm("picture") elif node_type == "ifd": # Matnra if node.evalParm("soho_outputmode"): return node.parm("soho_diskfile") - else: - return node.parm("vm_picture") + return node.parm("vm_picture") elif node_type == "Redshift_Proxy_Output": return node.parm("RS_archive_file") elif node_type == "Redshift_ROP": return node.parm("RS_outputFileNamePrefix") - elif ( - node_type == "usd" or - node_type == "usd_rop" or - node_type == "usdexport" - ): + elif node_type in {"usd", "usd_rop", "usdexport"}: return node.parm("lopoutput") - elif node_type == "usdrender" or node_type == "usdrender_rop": + elif node_type in {"usdrender", "usdrender_rop"}: return node.parm("outputimage") elif node_type == "vray_renderer": return node.parm("SettingsOutput_img_file_path") From 58dee9e05e84231d5f2651371f03e036c6ceca05 Mon Sep 17 00:00:00 2001 From: Mustafa Taher Date: Wed, 13 Dec 2023 23:34:48 +0200 Subject: [PATCH 18/30] BigRoy comment - Fix Typo Co-authored-by: Roy Nieterau --- openpype/hosts/houdini/api/lib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/houdini/api/lib.py b/openpype/hosts/houdini/api/lib.py index 39a7006ef4..edd50f10c1 100644 --- a/openpype/hosts/houdini/api/lib.py +++ b/openpype/hosts/houdini/api/lib.py @@ -168,7 +168,7 @@ def get_output_parameter(node): return node.parm("copoutput") elif node_type in {"karma", "opengl"}: return node.parm("picture") - elif node_type == "ifd": # Matnra + elif node_type == "ifd": # Mantra if node.evalParm("soho_outputmode"): return node.parm("soho_diskfile") return node.parm("vm_picture") From 74daec7f97ba2036ccdcae67fb97103779c406d8 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Thu, 14 Dec 2023 00:07:15 +0200 Subject: [PATCH 19/30] fix a bug with render split --- openpype/modules/deadline/abstract_submit_deadline.py | 2 +- .../deadline/plugins/publish/submit_houdini_render_deadline.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/modules/deadline/abstract_submit_deadline.py b/openpype/modules/deadline/abstract_submit_deadline.py index 187feb9b1a..e261800656 100644 --- a/openpype/modules/deadline/abstract_submit_deadline.py +++ b/openpype/modules/deadline/abstract_submit_deadline.py @@ -464,7 +464,7 @@ class AbstractSubmitDeadline(pyblish.api.InstancePlugin, self.log.info("Submitted job to Deadline: {}.".format(job_id)) # TODO: Find a way that's more generic and not render type specific - if "exportJob" in instance.data: + if instance.data.get("exportJob"): self.log.info("Splitting export and render in two jobs") self.log.info("Export job id: %s", job_id) render_job_info = self.get_job_info(dependency_job_ids=[job_id]) diff --git a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py index 0c75f632cb..6ab8e4b666 100644 --- a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py @@ -124,7 +124,7 @@ class HoudiniSubmitDeadline( # Whether Deadline render submission is being split in two # (extract + render) - split_render_job = instance.data["exportJob"] + split_render_job = instance.data.get("exportJob") # If there's some dependency job ids we can assume this is a render job # and not an export job From 9b33073791de81f1f3faf16282c9834f9e98d133 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Thu, 14 Dec 2023 00:49:47 +0200 Subject: [PATCH 20/30] rename `exportJob` flag to `split_render` --- .../hosts/houdini/plugins/publish/collect_arnold_rop.py | 6 +++--- .../hosts/houdini/plugins/publish/collect_mantra_rop.py | 6 +++--- openpype/hosts/houdini/plugins/publish/collect_vray_rop.py | 6 +++--- openpype/modules/deadline/abstract_submit_deadline.py | 2 +- .../plugins/publish/submit_houdini_render_deadline.py | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/openpype/hosts/houdini/plugins/publish/collect_arnold_rop.py b/openpype/hosts/houdini/plugins/publish/collect_arnold_rop.py index c7da8397dc..45d950106e 100644 --- a/openpype/hosts/houdini/plugins/publish/collect_arnold_rop.py +++ b/openpype/hosts/houdini/plugins/publish/collect_arnold_rop.py @@ -41,11 +41,11 @@ class CollectArnoldROPRenderProducts(pyblish.api.InstancePlugin): render_products = [] # Store whether we are splitting the render job (export + render) - export_job = bool(rop.parm("ar_ass_export_enable").eval()) - instance.data["exportJob"] = export_job + split_render = bool(rop.parm("ar_ass_export_enable").eval()) + instance.data["split_render"] = split_render export_prefix = None export_products = [] - if export_job: + if split_render: export_prefix = evalParmNoFrame( rop, "ar_ass_file", pad_character="0" ) diff --git a/openpype/hosts/houdini/plugins/publish/collect_mantra_rop.py b/openpype/hosts/houdini/plugins/publish/collect_mantra_rop.py index bc71576174..a28b425057 100644 --- a/openpype/hosts/houdini/plugins/publish/collect_mantra_rop.py +++ b/openpype/hosts/houdini/plugins/publish/collect_mantra_rop.py @@ -45,11 +45,11 @@ class CollectMantraROPRenderProducts(pyblish.api.InstancePlugin): render_products = [] # Store whether we are splitting the render job (export + render) - export_job = bool(rop.parm("soho_outputmode").eval()) - instance.data["exportJob"] = export_job + split_render = bool(rop.parm("soho_outputmode").eval()) + instance.data["split_render"] = split_render export_prefix = None export_products = [] - if export_job: + if split_render: export_prefix = evalParmNoFrame( rop, "soho_diskfile", pad_character="0" ) diff --git a/openpype/hosts/houdini/plugins/publish/collect_vray_rop.py b/openpype/hosts/houdini/plugins/publish/collect_vray_rop.py index a1f4554726..6e8fe1cc79 100644 --- a/openpype/hosts/houdini/plugins/publish/collect_vray_rop.py +++ b/openpype/hosts/houdini/plugins/publish/collect_vray_rop.py @@ -46,11 +46,11 @@ class CollectVrayROPRenderProducts(pyblish.api.InstancePlugin): # TODO: add render elements if render element # Store whether we are splitting the render job in an export + render - export_job = rop.parm("render_export_mode").eval() == "2" - instance.data["exportJob"] = export_job + split_render = rop.parm("render_export_mode").eval() == "2" + instance.data["split_render"] = split_render export_prefix = None export_products = [] - if export_job: + if split_render: export_prefix = evalParmNoFrame( rop, "render_export_filepath", pad_character="0" ) diff --git a/openpype/modules/deadline/abstract_submit_deadline.py b/openpype/modules/deadline/abstract_submit_deadline.py index e261800656..45aba560ba 100644 --- a/openpype/modules/deadline/abstract_submit_deadline.py +++ b/openpype/modules/deadline/abstract_submit_deadline.py @@ -464,7 +464,7 @@ class AbstractSubmitDeadline(pyblish.api.InstancePlugin, self.log.info("Submitted job to Deadline: {}.".format(job_id)) # TODO: Find a way that's more generic and not render type specific - if instance.data.get("exportJob"): + if instance.data.get("split_render"): self.log.info("Splitting export and render in two jobs") self.log.info("Export job id: %s", job_id) render_job_info = self.get_job_info(dependency_job_ids=[job_id]) diff --git a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py index 6ab8e4b666..1fb1143e52 100644 --- a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py @@ -124,7 +124,7 @@ class HoudiniSubmitDeadline( # Whether Deadline render submission is being split in two # (extract + render) - split_render_job = instance.data.get("exportJob") + split_render_job = instance.data.get("split_render") # If there's some dependency job ids we can assume this is a render job # and not an export job From ed24690f39a1ccdb7c2cd523eb421b626f714e9a Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Thu, 14 Dec 2023 11:27:12 +0200 Subject: [PATCH 21/30] BigRoy's comment - add tags to houdini deadline render jobs --- .../plugins/publish/submit_houdini_render_deadline.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py index 1fb1143e52..b3e29c7e2d 100644 --- a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py @@ -132,18 +132,21 @@ class HoudiniSubmitDeadline( if dependency_job_ids: is_export_job = False + job_type = "[RENDER]" if split_render_job and not is_export_job: # Convert from family to Deadline plugin name # i.e., arnold_rop -> Arnold plugin = instance.data["family"].replace("_rop", "").capitalize() else: plugin = "Houdini" + if split_render_job: + job_type = "[EXPORT IFD]" job_info = DeadlineJobInfo(Plugin=plugin) filepath = context.data["currentFile"] filename = os.path.basename(filepath) - job_info.Name = "{} - {}".format(filename, instance.name) + job_info.Name = "{} - {} {}".format(filename, instance.name, job_type) job_info.BatchName = filename job_info.UserName = context.data.get( From 8b6561ef91816e2cb4d2a834344007a5cbe01176 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 19 Dec 2023 18:30:22 +0100 Subject: [PATCH 22/30] removed dependencies related to already separated addons --- server_addon/openpype/client/pyproject.toml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/server_addon/openpype/client/pyproject.toml b/server_addon/openpype/client/pyproject.toml index 40da8f6716..367d4488a9 100644 --- a/server_addon/openpype/client/pyproject.toml +++ b/server_addon/openpype/client/pyproject.toml @@ -8,17 +8,12 @@ aiohttp_json_rpc = "*" # TVPaint server aiohttp-middlewares = "^2.0.0" wsrpc_aiohttp = "^3.1.1" # websocket server clique = "1.6.*" -gazu = "^0.9.3" -google-api-python-client = "^1.12.8" # sync server google support (should be separate?) jsonschema = "^2.6.0" pymongo = "^3.11.2" log4mongo = "^1.7" pathlib2= "^2.3.5" # deadline submit publish job only (single place, maybe not needed?) pyblish-base = "^1.8.11" -pynput = "^1.7.2" # Timers manager - TODO replace +pynput = "^1.7.2" # Timers manager - TODO remove "Qt.py" = "^1.3.3" qtawesome = "0.7.3" speedcopy = "^2.1" -slack-sdk = "^3.6.0" -pysftp = "^0.2.9" -dropbox = "^11.20.0" From e945b372505cf4bdaae9f08a0577cfc91bcc98e4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 19 Dec 2023 18:46:15 +0100 Subject: [PATCH 23/30] use 'pathlib' instead of 'pathlib2' --- openpype/scripts/ocio_wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/scripts/ocio_wrapper.py b/openpype/scripts/ocio_wrapper.py index fa231cd047..0a78e33c1f 100644 --- a/openpype/scripts/ocio_wrapper.py +++ b/openpype/scripts/ocio_wrapper.py @@ -21,7 +21,7 @@ Providing functionality: import click import json -from pathlib2 import Path +from pathlib import Path import PyOpenColorIO as ocio From 97022a519837374a769a917cd5a030ab212602bb Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 19 Dec 2023 18:46:57 +0100 Subject: [PATCH 24/30] removed 'pathlib2' from openpype addon requirements --- server_addon/openpype/client/pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/server_addon/openpype/client/pyproject.toml b/server_addon/openpype/client/pyproject.toml index 40da8f6716..c5d2d0e317 100644 --- a/server_addon/openpype/client/pyproject.toml +++ b/server_addon/openpype/client/pyproject.toml @@ -13,7 +13,6 @@ google-api-python-client = "^1.12.8" # sync server google support (should be sep jsonschema = "^2.6.0" pymongo = "^3.11.2" log4mongo = "^1.7" -pathlib2= "^2.3.5" # deadline submit publish job only (single place, maybe not needed?) pyblish-base = "^1.8.11" pynput = "^1.7.2" # Timers manager - TODO replace "Qt.py" = "^1.3.3" From bf0ad7225ff778dec1eed822f513f04b674756bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Wed, 20 Dec 2023 18:38:59 +0100 Subject: [PATCH 25/30] :recycle: remove muster related code --- .../plugins/publish/submit_publish_job.py | 46 ++++++------------- 1 file changed, 13 insertions(+), 33 deletions(-) diff --git a/openpype/modules/deadline/plugins/publish/submit_publish_job.py b/openpype/modules/deadline/plugins/publish/submit_publish_job.py index c9019b496b..228aa3ec81 100644 --- a/openpype/modules/deadline/plugins/publish/submit_publish_job.py +++ b/openpype/modules/deadline/plugins/publish/submit_publish_job.py @@ -89,7 +89,7 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin, """ - label = "Submit image sequence jobs to Deadline or Muster" + label = "Submit Image Publishing job to Deadline" order = pyblish.api.IntegratorOrder + 0.2 icon = "tractor" @@ -582,16 +582,7 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin, ''' - render_job = None - submission_type = "" - if instance.data.get("toBeRenderedOn") == "deadline": - render_job = instance.data.pop("deadlineSubmissionJob", None) - submission_type = "deadline" - - if instance.data.get("toBeRenderedOn") == "muster": - render_job = instance.data.pop("musterSubmissionJob", None) - submission_type = "muster" - + render_job = instance.data.pop("deadlineSubmissionJob", None) if not render_job and instance.data.get("tileRendering") is False: raise AssertionError(("Cannot continue without valid Deadline " "or Muster submission.")) @@ -624,21 +615,19 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin, "FTRACK_SERVER": os.environ.get("FTRACK_SERVER"), } - deadline_publish_job_id = None - if submission_type == "deadline": - # get default deadline webservice url from deadline module - self.deadline_url = instance.context.data["defaultDeadline"] - # if custom one is set in instance, use that - if instance.data.get("deadlineUrl"): - self.deadline_url = instance.data.get("deadlineUrl") - assert self.deadline_url, "Requires Deadline Webservice URL" + # get default deadline webservice url from deadline module + self.deadline_url = instance.context.data["defaultDeadline"] + # if custom one is set in instance, use that + if instance.data.get("deadlineUrl"): + self.deadline_url = instance.data.get("deadlineUrl") + assert self.deadline_url, "Requires Deadline Webservice URL" - deadline_publish_job_id = \ - self._submit_deadline_post_job(instance, render_job, instances) + deadline_publish_job_id = \ + self._submit_deadline_post_job(instance, render_job, instances) - # Inject deadline url to instances. - for inst in instances: - inst["deadlineUrl"] = self.deadline_url + # Inject deadline url to instances. + for inst in instances: + inst["deadlineUrl"] = self.deadline_url # publish job file publish_job = { @@ -664,15 +653,6 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin, if audio_file and os.path.isfile(audio_file): publish_job.update({"audio": audio_file}) - # pass Ftrack credentials in case of Muster - if submission_type == "muster": - ftrack = { - "FTRACK_API_USER": os.environ.get("FTRACK_API_USER"), - "FTRACK_API_KEY": os.environ.get("FTRACK_API_KEY"), - "FTRACK_SERVER": os.environ.get("FTRACK_SERVER"), - } - publish_job.update({"ftrack": ftrack}) - metadata_path, rootless_metadata_path = \ create_metadata_path(instance, anatomy) From 47af46c29f17303f540530dd1869460fca0445a1 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Wed, 20 Dec 2023 22:08:09 +0200 Subject: [PATCH 26/30] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20=20Kuba's=20comment?= =?UTF-8?q?=20-=20follow=20pyblish=20key=20naming=20convention?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- openpype/hosts/houdini/plugins/publish/collect_arnold_rop.py | 2 +- openpype/hosts/houdini/plugins/publish/collect_mantra_rop.py | 2 +- openpype/hosts/houdini/plugins/publish/collect_vray_rop.py | 2 +- openpype/modules/deadline/abstract_submit_deadline.py | 2 +- .../deadline/plugins/publish/submit_houdini_render_deadline.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/openpype/hosts/houdini/plugins/publish/collect_arnold_rop.py b/openpype/hosts/houdini/plugins/publish/collect_arnold_rop.py index 45d950106e..ffc2a526a3 100644 --- a/openpype/hosts/houdini/plugins/publish/collect_arnold_rop.py +++ b/openpype/hosts/houdini/plugins/publish/collect_arnold_rop.py @@ -42,7 +42,7 @@ class CollectArnoldROPRenderProducts(pyblish.api.InstancePlugin): # Store whether we are splitting the render job (export + render) split_render = bool(rop.parm("ar_ass_export_enable").eval()) - instance.data["split_render"] = split_render + instance.data["splitRender"] = split_render export_prefix = None export_products = [] if split_render: diff --git a/openpype/hosts/houdini/plugins/publish/collect_mantra_rop.py b/openpype/hosts/houdini/plugins/publish/collect_mantra_rop.py index a28b425057..64ef20f4e7 100644 --- a/openpype/hosts/houdini/plugins/publish/collect_mantra_rop.py +++ b/openpype/hosts/houdini/plugins/publish/collect_mantra_rop.py @@ -46,7 +46,7 @@ class CollectMantraROPRenderProducts(pyblish.api.InstancePlugin): # Store whether we are splitting the render job (export + render) split_render = bool(rop.parm("soho_outputmode").eval()) - instance.data["split_render"] = split_render + instance.data["splitRender"] = split_render export_prefix = None export_products = [] if split_render: diff --git a/openpype/hosts/houdini/plugins/publish/collect_vray_rop.py b/openpype/hosts/houdini/plugins/publish/collect_vray_rop.py index 6e8fe1cc79..ad4fdb0da5 100644 --- a/openpype/hosts/houdini/plugins/publish/collect_vray_rop.py +++ b/openpype/hosts/houdini/plugins/publish/collect_vray_rop.py @@ -47,7 +47,7 @@ class CollectVrayROPRenderProducts(pyblish.api.InstancePlugin): # Store whether we are splitting the render job in an export + render split_render = rop.parm("render_export_mode").eval() == "2" - instance.data["split_render"] = split_render + instance.data["splitRender"] = split_render export_prefix = None export_products = [] if split_render: diff --git a/openpype/modules/deadline/abstract_submit_deadline.py b/openpype/modules/deadline/abstract_submit_deadline.py index 45aba560ba..002dfa5992 100644 --- a/openpype/modules/deadline/abstract_submit_deadline.py +++ b/openpype/modules/deadline/abstract_submit_deadline.py @@ -464,7 +464,7 @@ class AbstractSubmitDeadline(pyblish.api.InstancePlugin, self.log.info("Submitted job to Deadline: {}.".format(job_id)) # TODO: Find a way that's more generic and not render type specific - if instance.data.get("split_render"): + if instance.data.get("splitRender"): self.log.info("Splitting export and render in two jobs") self.log.info("Export job id: %s", job_id) render_job_info = self.get_job_info(dependency_job_ids=[job_id]) diff --git a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py index b3e29c7e2d..c8960185b2 100644 --- a/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_houdini_render_deadline.py @@ -124,7 +124,7 @@ class HoudiniSubmitDeadline( # Whether Deadline render submission is being split in two # (extract + render) - split_render_job = instance.data.get("split_render") + split_render_job = instance.data.get("splitRender") # If there's some dependency job ids we can assume this is a render job # and not an export job From 19d9d37447211a9ddc393b8cd9978ae7a42faadb Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Thu, 21 Dec 2023 12:26:45 +0100 Subject: [PATCH 27/30] remove 'filters' in conversion --- openpype/settings/ayon_settings.py | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/openpype/settings/ayon_settings.py b/openpype/settings/ayon_settings.py index fd15fe41b9..2d10e771cd 100644 --- a/openpype/settings/ayon_settings.py +++ b/openpype/settings/ayon_settings.py @@ -479,13 +479,7 @@ def _convert_maya_project_settings(ayon_settings, output): } # Publish UI filters - new_filters = {} - for item in ayon_maya["filters"]: - new_filters[item["name"]] = { - subitem["name"]: subitem["value"] - for subitem in item["value"] - } - ayon_maya["filters"] = new_filters + ayon_maya["filters"] = {} # Maya dirmap ayon_maya_dirmap = ayon_maya.pop("maya_dirmap") @@ -885,14 +879,7 @@ def _convert_hiero_project_settings(ayon_settings, output): ayon_hiero = ayon_settings["hiero"] _convert_host_imageio(ayon_hiero) - new_gui_filters = {} - for item in ayon_hiero.pop("filters"): - subvalue = {} - key = item["name"] - for subitem in item["value"]: - subvalue[subitem["name"]] = subitem["value"] - new_gui_filters[key] = subvalue - ayon_hiero["filters"] = new_gui_filters + ayon_hiero["filters"] = {} ayon_load_clip = ayon_hiero["load"]["LoadClip"] if "product_types" in ayon_load_clip: @@ -953,16 +940,7 @@ def _convert_tvpaint_project_settings(ayon_settings, output): _convert_host_imageio(ayon_tvpaint) - filters = {} - for item in ayon_tvpaint["filters"]: - value = item["value"] - try: - value = json.loads(value) - - except ValueError: - value = {} - filters[item["name"]] = value - ayon_tvpaint["filters"] = filters + ayon_tvpaint["filters"] = {} ayon_publish_settings = ayon_tvpaint["publish"] for plugin_name in ( From 4d176e177f2e82546be0bc311017f16b7ec2a4b2 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Thu, 21 Dec 2023 13:13:54 +0100 Subject: [PATCH 28/30] keep hiero filters conversion --- openpype/settings/ayon_settings.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/openpype/settings/ayon_settings.py b/openpype/settings/ayon_settings.py index 2d10e771cd..9a209b762c 100644 --- a/openpype/settings/ayon_settings.py +++ b/openpype/settings/ayon_settings.py @@ -879,7 +879,14 @@ def _convert_hiero_project_settings(ayon_settings, output): ayon_hiero = ayon_settings["hiero"] _convert_host_imageio(ayon_hiero) - ayon_hiero["filters"] = {} + new_gui_filters = {} + for item in ayon_hiero.pop("filters", []): + subvalue = {} + key = item["name"] + for subitem in item["value"]: + subvalue[subitem["name"]] = subitem["value"] + new_gui_filters[key] = subvalue + ayon_hiero["filters"] = new_gui_filters ayon_load_clip = ayon_hiero["load"]["LoadClip"] if "product_types" in ayon_load_clip: From b81cb684a15cd8acb30267c33d9c6c3ac59eb434 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Thu, 21 Dec 2023 13:14:06 +0100 Subject: [PATCH 29/30] remove tvpaint and maya filters completelly --- openpype/settings/ayon_settings.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/openpype/settings/ayon_settings.py b/openpype/settings/ayon_settings.py index 9a209b762c..a6d90d1cf0 100644 --- a/openpype/settings/ayon_settings.py +++ b/openpype/settings/ayon_settings.py @@ -478,9 +478,6 @@ def _convert_maya_project_settings(ayon_settings, output): for item in ayon_maya["ext_mapping"] } - # Publish UI filters - ayon_maya["filters"] = {} - # Maya dirmap ayon_maya_dirmap = ayon_maya.pop("maya_dirmap") ayon_maya_dirmap_path = ayon_maya_dirmap["paths"] @@ -947,8 +944,6 @@ def _convert_tvpaint_project_settings(ayon_settings, output): _convert_host_imageio(ayon_tvpaint) - ayon_tvpaint["filters"] = {} - ayon_publish_settings = ayon_tvpaint["publish"] for plugin_name in ( "ValidateProjectSettings", From b04190419f2dde91eed0504a0f8d25b64aea403f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 21 Dec 2023 13:14:58 +0100 Subject: [PATCH 30/30] use correct label for filepath validations in traypublisher (#6084) --- .../hosts/traypublisher/plugins/publish/validate_filepaths.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/traypublisher/plugins/publish/validate_filepaths.py b/openpype/hosts/traypublisher/plugins/publish/validate_filepaths.py index 749199fbd3..b67e47d213 100644 --- a/openpype/hosts/traypublisher/plugins/publish/validate_filepaths.py +++ b/openpype/hosts/traypublisher/plugins/publish/validate_filepaths.py @@ -15,7 +15,7 @@ class ValidateFilePath(pyblish.api.InstancePlugin): This is primarily created for Simple Creator instances. """ - label = "Validate Workfile" + label = "Validate Filepaths" order = pyblish.api.ValidatorOrder - 0.49 hosts = ["traypublisher"]