From cd4adfefd27e51cd26422273b78d4f52e75d3f4d Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Tue, 5 Sep 2023 14:34:48 +0200 Subject: [PATCH 01/65] 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/65] 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/65] 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/65] 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 978816fda5f167fbf46f7b68fb19dbff4ea17be9 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:09:40 +0200 Subject: [PATCH 05/65] Update old Pype icon to AYON icon --- openpype/resources/icons/folder-favorite3.png | Bin 7957 -> 10232 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/openpype/resources/icons/folder-favorite3.png b/openpype/resources/icons/folder-favorite3.png index ce1e6d717181f164f2f459cc1d151c57b282990f..ab0656ad14a5c1351c0090ba280584a786357872 100644 GIT binary patch delta 8662 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 P@MmIZ1}oEddiZ|;-~&O{ delta 6434 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 From b0af8b1f3d04354eee9f24c6a97adb24c2899aa9 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:10:11 +0200 Subject: [PATCH 06/65] Remove unused folder-favorite icons --- openpype/resources/icons/folder-favorite.png | Bin 7008 -> 0 bytes openpype/resources/icons/folder-favorite2.png | Bin 22430 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 openpype/resources/icons/folder-favorite.png delete mode 100644 openpype/resources/icons/folder-favorite2.png diff --git a/openpype/resources/icons/folder-favorite.png b/openpype/resources/icons/folder-favorite.png deleted file mode 100644 index 198b289e9ed39e6f8e13b6debf5aee857039a032..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7008 zcmaJ_XH-*Lus(p1jw1C+vw}!fQKYLhk*Mrn zP>c@d{}ymU+okrNVpIC##aHeHMl#uRDV)Yn5ATQkFKF~hjia{WF1|Zo9P-reO2-FW zs+i=FrlgQeB?)J(<&BF~8m|YHI{d@>K5)3yG}ey&3iv!Ok=n^)xLkiIjC4VA=w(RNOI3UmoSJ-sf+#ZgA!>3L@%^r?No`;GK z2MSNK?RlTX{`i)VEJonR(e{pmg`d-sm9!pmZDt7i6N^7V#_$K7(r8H!=>iw)UWF1n zWBmkSx!1wNuBA2AwITi+KdB1GROGJ&>wR%c#echOrvQ6?u|w9}>CpgQsztBHH

XIfm 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 Date: Sat, 7 Oct 2023 20:11:12 +0200 Subject: [PATCH 07/65] Rename remaining folder-favorite icon to avoid number 3 behind it --- openpype/hosts/nuke/api/utils.py | 2 +- .../{folder-favorite3.png => folder-favorite.png} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename openpype/resources/icons/{folder-favorite3.png => folder-favorite.png} (100%) diff --git a/openpype/hosts/nuke/api/utils.py b/openpype/hosts/nuke/api/utils.py index 7b02585892..a7df1dee71 100644 --- a/openpype/hosts/nuke/api/utils.py +++ b/openpype/hosts/nuke/api/utils.py @@ -12,7 +12,7 @@ def set_context_favorites(favorites=None): favorites (dict): couples of {name:path} """ favorites = favorites or {} - icon_path = resources.get_resource("icons", "folder-favorite3.png") + icon_path = resources.get_resource("icons", "folder-favorite.png") for name, path in favorites.items(): nuke.addFavoriteDir( name, diff --git a/openpype/resources/icons/folder-favorite3.png b/openpype/resources/icons/folder-favorite.png similarity index 100% rename from openpype/resources/icons/folder-favorite3.png rename to openpype/resources/icons/folder-favorite.png From c2ef4bd97d6ec554f83c65c95e90d715e3be5ece Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:16:41 +0200 Subject: [PATCH 08/65] Match border color to exact icon color --- openpype/resources/icons/folder-favorite.png | Bin 10232 -> 10072 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/openpype/resources/icons/folder-favorite.png b/openpype/resources/icons/folder-favorite.png index ab0656ad14a5c1351c0090ba280584a786357872..65f04d8c8695b6fdf309758cff3d0320a1fae1bf 100644 GIT binary patch delta 8037 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

~J&ak`(to2{TXABf zVr+h`&cS+WM9f98vYL&5+qJzCq@X;mvDkcbWS}U!^5lrNrt(>oa1@~BB4>AxUuAW~ z<3xKkNc0Z9&i~060a>|r*nRl8rn*=ZV&{0Hy%wBR2MgUtV0Sv;u)7em&i&~cg3w`w z1j|HJ_c7N*k2kvD{7>!n29SIK9q>{F?0U$xgY_}&kM8aM-yA4eWi1<`zbvRJF9aZ~ z7y-p53$Cg0fC9@(3M&UevCJm}o4~S^ixZW|gv4z|=LxKVHXyMRRoVFAOCp5<|H(;bf5IW{4luuo&y4@>H;no{JBH#Mw-X*$)fu(eZR)O9$smAVged|T!3h; z96!t$?9AhM0nn9Z?U7j^JqP!Y1vJ)5-I`t>J!dCg=Xapl<5Xy61Z2C080&*x3Qt4v*F2tGbQ6TtJb!5Pl8vt_Z}du6s^ICZa&RM&(l$Z z@pD%h4H04AyOH3{Es7jFr=kybJ1EF-de_huRfj8Zx(LylKJZAJwFe!2--%N6=ptmI zh0ni^Flz^nysh%${H6d}omGpI4G4Kbx3q9p3g$JN2z=?nwxOqH3m8!vdyYTrZZ)NoXz$Y4Y%aLyGqH_Ni|LbfrjCzn?zG|sm;0iWwZfVjTCvQ*sW;?? zlT?Btz&#OakggD&P0H9Rh&31jmmh!A#I7a_f;`CuuVx>f2Zs}qj@&BPfBy&cn!7m( zNs%8Ku7YaSMVut8uW%yuL8CB25i2|mV6?KJ?=C)wqE*?^8L+{t3x^B-G8m@pe+~xk z8IFMV;oxS-fQt$M)%r)k$-nIuy--X&2z$~z?z*RA%s79!Yy8o$aZSt~e@-!Qvr!$gtyHD!X2?HM94&-5 zj+r7q1xfFGpMHR1Trt0zs`>T<<)OW*(OeaiDv`0*T$B4dCe9#(??qvJP#~hABr<=X zBkr9npU=Y4ur6jaKmUuoN~rMiJg$syVsQG4u{cyGQQMZas}b|yzPmhwCEnD#0!wKK z-0UCy1_M&MyYl)k@=ge#3^0s&!&d{>+!BP!yjQ~Sw=yE^A`7q-vKOn{9KLTH1SPsW z(5-fq!CO&0%=dZYgb>OAP4n{WJj=lJn=7&o@SY5gM5GVg=b4P$VJHvTYLb4osfS1} z$4F^ML}!Iv8ofXHa7-F*Os->OsN3|c^lf?w43aGnXOodN7a8i>dVUST!;~SN(;hGL zj}%EQF>i`3sJe&CKswWGoJi*wSl8Nn$IdD_gE#4&MWf1DCBdhok358oM(VmtHVdJ4 z6))Y(-OJnMvz_5B;(1BQ8D!j>rdAXu5N%~RNp`k1j#+}o9as0TUyQ<`CTu~kl8F4i zQ=L@OV%F%rg7*x~ZdTq0`yv{WHvUfTCAcO_NPvwBEp2gTk?i3W7BFE)3#>CBd(x}3D8D&=X@0~gsz@M>!DYQb*@$vrx4s`X< From 823250f427a21895e4a09c36a333b8921cbd3d29 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sat, 7 Oct 2023 20:31:51 +0200 Subject: [PATCH 09/65] 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 10/65] 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 11/65] 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 12/65] 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 13/65] 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 14/65] 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 b502019d2b7c9bbaab06fde78c41d951c7c39a71 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Mon, 4 Dec 2023 15:23:56 +0800 Subject: [PATCH 15/65] bug fix on collector for not being able to collect textures from texture nodes in yeti graph --- openpype/hosts/maya/plugins/publish/collect_yeti_rig.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py index df761cde13..b05bbc7961 100644 --- a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py @@ -128,7 +128,12 @@ class CollectYetiRig(pyblish.api.InstancePlugin): image_search_paths = self._replace_tokens(image_search_paths) # List all related textures - texture_filenames = cmds.pgYetiCommand(node, listTextures=True) + texture_nodes = cmds.pgYetiGraph(node, listNodes=True, type="texture") + texture_filenames = [cmds.pgYetiGraph(node, + node=texture_node, + param="file_name", + getParamValue=True) + for texture_node in texture_nodes] self.log.debug("Found %i texture(s)" % len(texture_filenames)) # Get all reference nodes From caf8a2a2dfdcb259ee80e20c223078e12b1d2342 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Mon, 4 Dec 2023 17:41:28 +0800 Subject: [PATCH 16/65] hound --- openpype/hosts/maya/plugins/publish/collect_yeti_rig.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py index b05bbc7961..7a2121742c 100644 --- a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py @@ -128,12 +128,13 @@ class CollectYetiRig(pyblish.api.InstancePlugin): image_search_paths = self._replace_tokens(image_search_paths) # List all related textures - texture_nodes = cmds.pgYetiGraph(node, listNodes=True, type="texture") + texture_nodes = cmds.pgYetiGraph( + node, listNodes=True, type="texture") texture_filenames = [cmds.pgYetiGraph(node, node=texture_node, param="file_name", getParamValue=True) - for texture_node in texture_nodes] + for texture_node in texture_nodes] self.log.debug("Found %i texture(s)" % len(texture_filenames)) # Get all reference nodes From 8c615a0db8e1ba251ad09d4d9dbabbdeceeb29cc Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Mon, 4 Dec 2023 17:42:33 +0800 Subject: [PATCH 17/65] hound --- openpype/hosts/maya/plugins/publish/collect_yeti_rig.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py index 7a2121742c..b2c124d2fd 100644 --- a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py @@ -134,7 +134,8 @@ class CollectYetiRig(pyblish.api.InstancePlugin): node=texture_node, param="file_name", getParamValue=True) - for texture_node in texture_nodes] + for texture_node + in texture_nodes] self.log.debug("Found %i texture(s)" % len(texture_filenames)) # Get all reference nodes From 3fe3b217415ad7cb89641ea74eba00fa78885c07 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Mon, 4 Dec 2023 17:44:22 +0800 Subject: [PATCH 18/65] hound --- .../hosts/maya/plugins/publish/collect_yeti_rig.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py index b2c124d2fd..5f40d009c2 100644 --- a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py @@ -130,12 +130,12 @@ class CollectYetiRig(pyblish.api.InstancePlugin): # List all related textures texture_nodes = cmds.pgYetiGraph( node, listNodes=True, type="texture") - texture_filenames = [cmds.pgYetiGraph(node, - node=texture_node, - param="file_name", - getParamValue=True) - for texture_node - in texture_nodes] + texture_filenames = [ + cmds.pgYetiGraph( + node, node=texture_node, + param="file_name", getParamValue=True) + for texture_node in texture_nodes + ] self.log.debug("Found %i texture(s)" % len(texture_filenames)) # Get all reference nodes From 889f86457d9a8c9b94042863fa8ed484d21f920f Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Mon, 4 Dec 2023 17:46:06 +0800 Subject: [PATCH 19/65] hound --- openpype/hosts/maya/plugins/publish/collect_yeti_rig.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py index 5f40d009c2..835934e1bf 100644 --- a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py @@ -132,8 +132,8 @@ class CollectYetiRig(pyblish.api.InstancePlugin): node, listNodes=True, type="texture") texture_filenames = [ cmds.pgYetiGraph( - node, node=texture_node, - param="file_name", getParamValue=True) + node, node=texture_node, + param="file_name", getParamValue=True) for texture_node in texture_nodes ] self.log.debug("Found %i texture(s)" % len(texture_filenames)) From 187b4087ec8486eaa4c4d4ab6d180dec26ef70e4 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 4 Dec 2023 15:39:19 +0000 Subject: [PATCH 20/65] 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 21/65] 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 22/65] 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 23/65] 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 24/65] 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 25/65] 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 26/65] 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 27/65] 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 28/65] 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 29/65] 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 30/65] 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 31/65] 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 32/65] 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 33/65] 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 09a7ecdcc611c9db87fbcdbfbc1d274057e999b5 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Dec 2023 11:18:25 +0100 Subject: [PATCH 34/65] Fix representation count (#6072) --- .../hosts/aftereffects/test_publish_in_aftereffects_legacy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/hosts/aftereffects/test_publish_in_aftereffects_legacy.py b/tests/integration/hosts/aftereffects/test_publish_in_aftereffects_legacy.py index b99db24e75..0d97da6b8b 100644 --- a/tests/integration/hosts/aftereffects/test_publish_in_aftereffects_legacy.py +++ b/tests/integration/hosts/aftereffects/test_publish_in_aftereffects_legacy.py @@ -60,7 +60,7 @@ class TestPublishInAfterEffects(AELocalPublishTestClass): name="renderTest_taskMain")) failures.append( - DBAssert.count_of_types(dbcon, "representation", 2)) + DBAssert.count_of_types(dbcon, "representation", 3)) additional_args = {"context.subset": "workfileTest_task", "context.ext": "aep"} From af87fdf657adb7ca5dd6f34bdd41335dc2b9efa7 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 20 Dec 2023 21:31:19 +0800 Subject: [PATCH 35/65] the resourceDir for texture also supports without image search path --- .../maya/plugins/publish/collect_yeti_rig.py | 29 ++++++++----------- .../maya/plugins/publish/extract_yeti_rig.py | 16 ++++++---- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py index 835934e1bf..d67c51b895 100644 --- a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py @@ -124,19 +124,19 @@ class CollectYetiRig(pyblish.api.InstancePlugin): image_search_paths = [p for p in image_search_paths.split(os.path.pathsep) if p] - # find all ${TOKEN} tokens and replace them with $TOKEN env. variable - image_search_paths = self._replace_tokens(image_search_paths) + # find all ${TOKEN} tokens and replace them with $TOKEN env. variable + image_search_paths = self._replace_tokens(image_search_paths) - # List all related textures - texture_nodes = cmds.pgYetiGraph( - node, listNodes=True, type="texture") - texture_filenames = [ - cmds.pgYetiGraph( - node, node=texture_node, - param="file_name", getParamValue=True) - for texture_node in texture_nodes - ] - self.log.debug("Found %i texture(s)" % len(texture_filenames)) + # List all related textures + texture_nodes = cmds.pgYetiGraph( + node, listNodes=True, type="texture") + texture_filenames = [ + cmds.pgYetiGraph( + node, node=texture_node, + param="file_name", getParamValue=True) + for texture_node in texture_nodes + ] + self.log.debug("Found %i texture(s)" % len(texture_filenames)) # Get all reference nodes reference_nodes = cmds.pgYetiGraph(node, @@ -144,11 +144,6 @@ class CollectYetiRig(pyblish.api.InstancePlugin): type="reference") self.log.debug("Found %i reference node(s)" % len(reference_nodes)) - if texture_filenames and not image_search_paths: - raise ValueError("pgYetiMaya node '%s' is missing the path to the " - "files in the 'imageSearchPath " - "atttribute'" % node) - # Collect all texture files # find all ${TOKEN} tokens and replace them with $TOKEN env. variable texture_filenames = self._replace_tokens(texture_filenames) diff --git a/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py b/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py index da67cb911f..a76d15d43e 100644 --- a/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py @@ -142,12 +142,18 @@ class ExtractYetiRig(publish.Extractor): instance.data['transfers'] = [] for resource in instance.data.get('resources', []): - for file in resource['files']: - src = file - dst = os.path.join(image_search_path, os.path.basename(file)) - instance.data['transfers'].append([src, dst]) + if resource["files"]: + for file in resource['files']: + src = file + dst = os.path.join(image_search_path, os.path.basename(file)) + instance.data['transfers'].append([src, dst]) + else: + for file in resource['source']: + src = file if os.path.isabs(file) else os.path.abspath(file) + dst = os.path.join(image_search_path, os.path.basename(file)) + instance.data['transfers'].append([src, dst]) - self.log.debug("adding transfer {} -> {}". format(src, dst)) + self.log.debug("adding transfer {} -> {}". format(src, dst)) # Ensure the imageSearchPath is being remapped to the publish folder attr_value = {"%s.imageSearchPath" % n: str(image_search_path) for From da93e19ca9f2832eb30774b7db6b82aff7f0dfc7 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 20 Dec 2023 21:32:56 +0800 Subject: [PATCH 36/65] hound --- .../hosts/maya/plugins/publish/extract_yeti_rig.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py b/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py index a76d15d43e..c0c286dcc0 100644 --- a/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py @@ -145,12 +145,16 @@ class ExtractYetiRig(publish.Extractor): if resource["files"]: for file in resource['files']: src = file - dst = os.path.join(image_search_path, os.path.basename(file)) + dst = os.path.join( + image_search_path, os.path.basename(file)) instance.data['transfers'].append([src, dst]) else: for file in resource['source']: - src = file if os.path.isabs(file) else os.path.abspath(file) - dst = os.path.join(image_search_path, os.path.basename(file)) + src = ( + file if os.path.isabs(file) else os.path.abspath(file) + ) + dst = os.path.join( + image_search_path, os.path.basename(file)) instance.data['transfers'].append([src, dst]) self.log.debug("adding transfer {} -> {}". format(src, dst)) From 19666f7df32f58490e88cea2ea6f4b8978ebf82d Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Wed, 20 Dec 2023 15:48:47 +0100 Subject: [PATCH 37/65] Refactor integrate_ftrack_instances.py to update asset names for multiple reviewable items - Add a condition to also check if multiple_reviewable is True before updating the asset name. --- .../modules/ftrack/plugins/publish/integrate_ftrack_instances.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openpype/modules/ftrack/plugins/publish/integrate_ftrack_instances.py b/openpype/modules/ftrack/plugins/publish/integrate_ftrack_instances.py index a3e6bc25c5..04186425f9 100644 --- a/openpype/modules/ftrack/plugins/publish/integrate_ftrack_instances.py +++ b/openpype/modules/ftrack/plugins/publish/integrate_ftrack_instances.py @@ -354,6 +354,7 @@ class IntegrateFtrackInstance(pyblish.api.InstancePlugin): if ( not self.keep_first_subset_name_for_review and extended_asset_name + and multiple_reviewable ): other_item["asset_data"]["name"] = extended_asset_name From a09fc5814850673faf173acf73ce39d75dff538e Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Wed, 20 Dec 2023 15:56:21 +0100 Subject: [PATCH 38/65] flipping order of condition arguments --- .../ftrack/plugins/publish/integrate_ftrack_instances.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/modules/ftrack/plugins/publish/integrate_ftrack_instances.py b/openpype/modules/ftrack/plugins/publish/integrate_ftrack_instances.py index 04186425f9..4b1307f9f0 100644 --- a/openpype/modules/ftrack/plugins/publish/integrate_ftrack_instances.py +++ b/openpype/modules/ftrack/plugins/publish/integrate_ftrack_instances.py @@ -352,9 +352,9 @@ class IntegrateFtrackInstance(pyblish.api.InstancePlugin): # add extended name if any if ( - not self.keep_first_subset_name_for_review + multiple_reviewable + and not self.keep_first_subset_name_for_review and extended_asset_name - and multiple_reviewable ): other_item["asset_data"]["name"] = extended_asset_name From 64d39613fa4bbd2459cc0d66c73e7d1fb8329831 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 20 Dec 2023 18:34:37 +0100 Subject: [PATCH 39/65] Python console widget: Save registry fix (#6076) * it is possible to call 'save_registry' only when window is showed up * used more clever way how to determine if should be saved --- .../python_console_interpreter/window/widgets.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/openpype/modules/python_console_interpreter/window/widgets.py b/openpype/modules/python_console_interpreter/window/widgets.py index 28950f8369..d046c0de50 100644 --- a/openpype/modules/python_console_interpreter/window/widgets.py +++ b/openpype/modules/python_console_interpreter/window/widgets.py @@ -354,7 +354,7 @@ class PythonInterpreterWidget(QtWidgets.QWidget): default_width = 1000 default_height = 600 - def __init__(self, parent=None): + def __init__(self, allow_save_registry=True, parent=None): super(PythonInterpreterWidget, self).__init__(parent) self.setWindowTitle("{} Console".format( @@ -414,6 +414,8 @@ class PythonInterpreterWidget(QtWidgets.QWidget): self._first_show = True self._splitter_size_ratio = None + self._allow_save_registry = allow_save_registry + self._registry_saved = True self._init_from_registry() @@ -457,6 +459,11 @@ class PythonInterpreterWidget(QtWidgets.QWidget): pass def save_registry(self): + # Window was not showed + if not self._allow_save_registry or self._registry_saved: + return + + self._registry_saved = True setting_registry = PythonInterpreterRegistry() setting_registry.set_item("width", self.width()) @@ -650,6 +657,7 @@ class PythonInterpreterWidget(QtWidgets.QWidget): def showEvent(self, event): self._line_check_timer.start() + self._registry_saved = False super(PythonInterpreterWidget, self).showEvent(event) # First show setup if self._first_show: 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 40/65] :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 41/65] =?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 fcd605ae7dc99ab5f8965ada71bd317bce0c1a35 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 21 Dec 2023 15:43:08 +0800 Subject: [PATCH 42/65] make sure error will be raised if there is neither texture nor image search path --- .../maya/plugins/publish/collect_yeti_rig.py | 8 ++++---- .../maya/plugins/publish/extract_yeti_rig.py | 18 ++++-------------- openpype/pipeline/publish/lib.py | 2 +- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py index d67c51b895..f82f7b69cd 100644 --- a/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/collect_yeti_rig.py @@ -6,6 +6,7 @@ from maya import cmds import pyblish.api from openpype.hosts.maya.api import lib +from openpype.pipeline.publish import KnownPublishError SETTINGS = {"renderDensity", @@ -116,7 +117,6 @@ class CollectYetiRig(pyblish.api.InstancePlugin): resources = [] image_search_paths = cmds.getAttr("{}.imageSearchPath".format(node)) - texture_filenames = [] if image_search_paths: # TODO: Somehow this uses OS environment path separator, `:` vs `;` @@ -124,8 +124,8 @@ class CollectYetiRig(pyblish.api.InstancePlugin): image_search_paths = [p for p in image_search_paths.split(os.path.pathsep) if p] - # find all ${TOKEN} tokens and replace them with $TOKEN env. variable - image_search_paths = self._replace_tokens(image_search_paths) + # find all ${TOKEN} tokens and replace them with $TOKEN env. variable + image_search_paths = self._replace_tokens(image_search_paths) # List all related textures texture_nodes = cmds.pgYetiGraph( @@ -163,7 +163,7 @@ class CollectYetiRig(pyblish.api.InstancePlugin): break if not files: - self.log.warning( + raise KnownPublishError( "No texture found for: %s " "(searched: %s)" % (texture, image_search_paths)) diff --git a/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py b/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py index c0c286dcc0..413961073f 100644 --- a/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py @@ -142,20 +142,10 @@ class ExtractYetiRig(publish.Extractor): instance.data['transfers'] = [] for resource in instance.data.get('resources', []): - if resource["files"]: - for file in resource['files']: - src = file - dst = os.path.join( - image_search_path, os.path.basename(file)) - instance.data['transfers'].append([src, dst]) - else: - for file in resource['source']: - src = ( - file if os.path.isabs(file) else os.path.abspath(file) - ) - dst = os.path.join( - image_search_path, os.path.basename(file)) - instance.data['transfers'].append([src, dst]) + for file in resource['files']: + src = file + dst = os.path.join(image_search_path, os.path.basename(file)) + instance.data['transfers'].append([src, dst]) self.log.debug("adding transfer {} -> {}". format(src, dst)) diff --git a/openpype/pipeline/publish/lib.py b/openpype/pipeline/publish/lib.py index 4ea2f932f1..87ca3323cb 100644 --- a/openpype/pipeline/publish/lib.py +++ b/openpype/pipeline/publish/lib.py @@ -74,7 +74,7 @@ def get_template_name_profiles( project_settings ["global"] ["publish"] - ["IntegrateAssetNew"] + ["IntegrateHeroVersion"] ["template_name_profiles"] ) if legacy_profiles: From 92107167af33f5617df0add058bfb8399e7f4723 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 21 Dec 2023 15:43:51 +0800 Subject: [PATCH 43/65] restore unnecessary tweaks --- openpype/pipeline/publish/lib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/pipeline/publish/lib.py b/openpype/pipeline/publish/lib.py index 87ca3323cb..4ea2f932f1 100644 --- a/openpype/pipeline/publish/lib.py +++ b/openpype/pipeline/publish/lib.py @@ -74,7 +74,7 @@ def get_template_name_profiles( project_settings ["global"] ["publish"] - ["IntegrateHeroVersion"] + ["IntegrateAssetNew"] ["template_name_profiles"] ) if legacy_profiles: From 186ecff5470c3a26d614d9c587965cf2c70bcef1 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 21 Dec 2023 15:45:15 +0800 Subject: [PATCH 44/65] restore unnecessary tweaks --- openpype/hosts/maya/plugins/publish/extract_yeti_rig.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py b/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py index 413961073f..da67cb911f 100644 --- a/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py +++ b/openpype/hosts/maya/plugins/publish/extract_yeti_rig.py @@ -147,7 +147,7 @@ class ExtractYetiRig(publish.Extractor): dst = os.path.join(image_search_path, os.path.basename(file)) instance.data['transfers'].append([src, dst]) - self.log.debug("adding transfer {} -> {}". format(src, dst)) + self.log.debug("adding transfer {} -> {}". format(src, dst)) # Ensure the imageSearchPath is being remapped to the publish folder attr_value = {"%s.imageSearchPath" % n: str(image_search_path) for From 19d9d37447211a9ddc393b8cd9978ae7a42faadb Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Thu, 21 Dec 2023 12:26:45 +0100 Subject: [PATCH 45/65] 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 46/65] 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 47/65] 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 48/65] 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"] From fa24804eff3de6c6b39940123adb5417b8d41f12 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Sat, 23 Dec 2023 03:25:06 +0000 Subject: [PATCH 49/65] [Automated] Bump version --- openpype/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/version.py b/openpype/version.py index c4ff4dde95..505148da16 100644 --- a/openpype/version.py +++ b/openpype/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring Pype version.""" -__version__ = "3.18.2-nightly.2" +__version__ = "3.18.2-nightly.3" From 226a2e0b8b0f03e48a47673d91871fe4fb2f5487 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 23 Dec 2023 03:25:38 +0000 Subject: [PATCH 50/65] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index fd3455ac76..bacdfc3a15 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to OpenPype Tray options: + - 3.18.2-nightly.3 - 3.18.2-nightly.2 - 3.18.2-nightly.1 - 3.18.1 @@ -134,7 +135,6 @@ body: - 3.15.5-nightly.1 - 3.15.4 - 3.15.4-nightly.3 - - 3.15.4-nightly.2 validations: required: true - type: dropdown From 4b6e7beb87f57d34931801c9993fa61f8a135a74 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Sat, 23 Dec 2023 21:23:34 +0800 Subject: [PATCH 51/65] make sure extract review intermediate disabled when both deprecrated and current setting diabled --- .../nuke/plugins/publish/extract_review_intermediates.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openpype/hosts/nuke/plugins/publish/extract_review_intermediates.py b/openpype/hosts/nuke/plugins/publish/extract_review_intermediates.py index 3ee166eb56..a02a807206 100644 --- a/openpype/hosts/nuke/plugins/publish/extract_review_intermediates.py +++ b/openpype/hosts/nuke/plugins/publish/extract_review_intermediates.py @@ -34,6 +34,11 @@ class ExtractReviewIntermediates(publish.Extractor): nuke_publish = project_settings["nuke"]["publish"] deprecated_setting = nuke_publish["ExtractReviewDataMov"] current_setting = nuke_publish.get("ExtractReviewIntermediates") + if not deprecated_setting["enabled"] and ( + not current_setting["enabled"] + ): + cls.enabled = False + if deprecated_setting["enabled"]: # Use deprecated settings if they are still enabled cls.viewer_lut_raw = deprecated_setting["viewer_lut_raw"] From 58172994cfe70afa169aa68dc414cc947a20ab98 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 27 Dec 2023 03:25:47 +0000 Subject: [PATCH 52/65] [Automated] Bump version --- openpype/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/version.py b/openpype/version.py index 505148da16..93fdf432b3 100644 --- a/openpype/version.py +++ b/openpype/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring Pype version.""" -__version__ = "3.18.2-nightly.3" +__version__ = "3.18.2-nightly.4" From 11a3114de8c64bd64854bdccde3d257c746abdad Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Dec 2023 03:26:21 +0000 Subject: [PATCH 53/65] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index bacdfc3a15..a691e021fd 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to OpenPype Tray options: + - 3.18.2-nightly.4 - 3.18.2-nightly.3 - 3.18.2-nightly.2 - 3.18.2-nightly.1 @@ -134,7 +135,6 @@ body: - 3.15.5-nightly.2 - 3.15.5-nightly.1 - 3.15.4 - - 3.15.4-nightly.3 validations: required: true - type: dropdown From adf9cb3e2c0054f34b0f7b10ac9cfaa4291916f3 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Sat, 30 Dec 2023 03:25:08 +0000 Subject: [PATCH 54/65] [Automated] Bump version --- openpype/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/version.py b/openpype/version.py index 93fdf432b3..550bdb70c7 100644 --- a/openpype/version.py +++ b/openpype/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring Pype version.""" -__version__ = "3.18.2-nightly.4" +__version__ = "3.18.2-nightly.5" From 8ea81950e2341692dc3d76a6acdd5c5c0ddf96b6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 30 Dec 2023 03:25:40 +0000 Subject: [PATCH 55/65] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index a691e021fd..f345829356 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to OpenPype Tray options: + - 3.18.2-nightly.5 - 3.18.2-nightly.4 - 3.18.2-nightly.3 - 3.18.2-nightly.2 @@ -134,7 +135,6 @@ body: - 3.15.5 - 3.15.5-nightly.2 - 3.15.5-nightly.1 - - 3.15.4 validations: required: true - type: dropdown From e107526bbd8e3daf9cfed36de3d06c5db3cb078b Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 2 Jan 2024 11:59:18 +0100 Subject: [PATCH 56/65] fix action to be able to run --- .../ftrack/event_handlers_user/action_djvview.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openpype/modules/ftrack/event_handlers_user/action_djvview.py b/openpype/modules/ftrack/event_handlers_user/action_djvview.py index 334519b4bb..bd9cd62e49 100644 --- a/openpype/modules/ftrack/event_handlers_user/action_djvview.py +++ b/openpype/modules/ftrack/event_handlers_user/action_djvview.py @@ -190,12 +190,12 @@ class DJVViewAction(BaseAction): """Callback method for DJVView action.""" # Launching application - event_data = event["data"] - if "values" not in event_data: + event_values = event["data"].get("value") + if not event_values: return - djv_app_name = event_data["djv_app_name"] - app = self.applicaion_manager.applications.get(djv_app_name) + djv_app_name = event_values["djv_app_name"] + app = self.application_manager.applications.get(djv_app_name) executable = None if app is not None: executable = app.find_executable() @@ -206,11 +206,11 @@ class DJVViewAction(BaseAction): "message": "Couldn't find DJV executable." } - filpath = os.path.normpath(event_data["values"]["path"]) + filpath = os.path.normpath(event_values["path"]) cmd = [ # DJV path - executable, + str(executable), # PATH TO COMPONENT filpath ] From 1e485614bdd01169627b2a05f2005b4d1ef0ade6 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 2 Jan 2024 11:59:45 +0100 Subject: [PATCH 57/65] keep process in momery for some time --- .../modules/ftrack/event_handlers_user/action_djvview.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openpype/modules/ftrack/event_handlers_user/action_djvview.py b/openpype/modules/ftrack/event_handlers_user/action_djvview.py index bd9cd62e49..5cc056cd91 100644 --- a/openpype/modules/ftrack/event_handlers_user/action_djvview.py +++ b/openpype/modules/ftrack/event_handlers_user/action_djvview.py @@ -217,7 +217,10 @@ class DJVViewAction(BaseAction): try: # Run DJV with these commands - subprocess.Popen(cmd) + _process = subprocess.Popen(cmd) + # Keep process in memory for some time + time.sleep(0.1) + except FileNotFoundError: return { "success": False, From 58a36c541462eda406f90e5d8d0174a689d3ec3b Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 2 Jan 2024 12:00:03 +0100 Subject: [PATCH 58/65] formatting changes --- .../event_handlers_user/action_djvview.py | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/openpype/modules/ftrack/event_handlers_user/action_djvview.py b/openpype/modules/ftrack/event_handlers_user/action_djvview.py index 5cc056cd91..5778f0d26e 100644 --- a/openpype/modules/ftrack/event_handlers_user/action_djvview.py +++ b/openpype/modules/ftrack/event_handlers_user/action_djvview.py @@ -60,7 +60,7 @@ class DJVViewAction(BaseAction): return False def interface(self, session, entities, event): - if event['data'].get('values', {}): + if event["data"].get("values", {}): return entity = entities[0] @@ -70,32 +70,32 @@ class DJVViewAction(BaseAction): if entity_type == "assetversion": if ( entity[ - 'components' - ][0]['file_type'][1:] in self.allowed_types + "components" + ][0]["file_type"][1:] in self.allowed_types ): versions.append(entity) else: master_entity = entity if entity_type == "task": - master_entity = entity['parent'] + master_entity = entity["parent"] - for asset in master_entity['assets']: - for version in asset['versions']: + for asset in master_entity["assets"]: + for version in asset["versions"]: # Get only AssetVersion of selected task if ( entity_type == "task" and - version['task']['id'] != entity['id'] + version["task"]["id"] != entity["id"] ): continue # Get only components with allowed type - filetype = version['components'][0]['file_type'] + filetype = version["components"][0]["file_type"] if filetype[1:] in self.allowed_types: versions.append(version) if len(versions) < 1: return { - 'success': False, - 'message': 'There are no Asset Versions to open.' + "success": False, + "message": "There are no Asset Versions to open." } # TODO sort them (somehow?) @@ -134,57 +134,57 @@ class DJVViewAction(BaseAction): last_available = None select_value = None for version in versions: - for component in version['components']: + for component in version["components"]: label = base_label.format( - str(version['version']).zfill(3), - version['asset']['type']['name'], - component['name'] + str(version["version"]).zfill(3), + version["asset"]["type"]["name"], + component["name"] ) try: location = component[ - 'component_locations' - ][0]['location'] + "component_locations" + ][0]["location"] file_path = location.get_filesystem_path(component) except Exception: file_path = component[ - 'component_locations' - ][0]['resource_identifier'] + "component_locations" + ][0]["resource_identifier"] if os.path.isdir(os.path.dirname(file_path)): last_available = file_path - if component['name'] == default_component: + if component["name"] == default_component: select_value = file_path version_items.append( - {'label': label, 'value': file_path} + {"label": label, "value": file_path} ) if len(version_items) == 0: return { - 'success': False, - 'message': ( - 'There are no Asset Versions with accessible path.' + "success": False, + "message": ( + "There are no Asset Versions with accessible path." ) } item = { - 'label': 'Items to view', - 'type': 'enumerator', - 'name': 'path', - 'data': sorted( + "label": "Items to view", + "type": "enumerator", + "name": "path", + "data": sorted( version_items, - key=itemgetter('label'), + key=itemgetter("label"), reverse=True ) } if select_value is not None: - item['value'] = select_value + item["value"] = select_value else: - item['value'] = last_available + item["value"] = last_available items.append(item) - return {'items': items} + return {"items": items} def launch(self, session, entities, event): """Callback method for DJVView action.""" From 480c509f8ea4ac4baa835dcb5ae52cb428ad3cbf Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 2 Jan 2024 15:36:51 +0100 Subject: [PATCH 59/65] fix used key --- openpype/modules/ftrack/event_handlers_user/action_djvview.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/modules/ftrack/event_handlers_user/action_djvview.py b/openpype/modules/ftrack/event_handlers_user/action_djvview.py index 5778f0d26e..cc37faacf2 100644 --- a/openpype/modules/ftrack/event_handlers_user/action_djvview.py +++ b/openpype/modules/ftrack/event_handlers_user/action_djvview.py @@ -13,7 +13,7 @@ class DJVViewAction(BaseAction): description = "DJV View Launcher" icon = statics_icon("app_icons", "djvView.png") - type = 'Application' + type = "Application" allowed_types = [ "cin", "dpx", "avi", "dv", "gif", "flv", "mkv", "mov", "mpg", "mpeg", @@ -190,7 +190,7 @@ class DJVViewAction(BaseAction): """Callback method for DJVView action.""" # Launching application - event_values = event["data"].get("value") + event_values = event["data"].get("values") if not event_values: return From bea3c78079e2caa27876873beabc83efea9b6d07 Mon Sep 17 00:00:00 2001 From: erictsaivfx Date: Tue, 2 Jan 2024 09:31:10 -0800 Subject: [PATCH 60/65] fix arrow to timezone typo --- openpype/tools/ayon_workfiles/models/workfiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/tools/ayon_workfiles/models/workfiles.py b/openpype/tools/ayon_workfiles/models/workfiles.py index d74a8e164d..f9f910ac8a 100644 --- a/openpype/tools/ayon_workfiles/models/workfiles.py +++ b/openpype/tools/ayon_workfiles/models/workfiles.py @@ -606,7 +606,7 @@ class PublishWorkfilesModel: print("Failed to format workfile path: {}".format(exc)) dirpath, filename = os.path.split(workfile_path) - created_at = arrow.get(repre_entity["createdAt"].to("local")) + created_at = arrow.get(repre_entity["createdAt"]).to("local") return FileItem( dirpath, filename, From c4ee2f785849db86db967c54d4f256946fbb093a Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 3 Jan 2024 03:26:06 +0000 Subject: [PATCH 61/65] [Automated] Bump version --- openpype/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/version.py b/openpype/version.py index 550bdb70c7..6a8e6f0d95 100644 --- a/openpype/version.py +++ b/openpype/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring Pype version.""" -__version__ = "3.18.2-nightly.5" +__version__ = "3.18.2-nightly.6" From 58909f2b4d90fc6165142014ad59825bad550eda Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 3 Jan 2024 03:26:39 +0000 Subject: [PATCH 62/65] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index f345829356..3471c32430 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to OpenPype Tray options: + - 3.18.2-nightly.6 - 3.18.2-nightly.5 - 3.18.2-nightly.4 - 3.18.2-nightly.3 @@ -134,7 +135,6 @@ body: - 3.15.6-nightly.1 - 3.15.5 - 3.15.5-nightly.2 - - 3.15.5-nightly.1 validations: required: true - type: dropdown From e4e6503017c4b1333129df4c16208fd239a7f779 Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Wed, 3 Jan 2024 12:07:32 +0100 Subject: [PATCH 63/65] Testing: Release Maya/Deadline job from pending when testing. (#5988) * Release job from pending when testing. * Removed render instance This test was created as simple model and workfile publish, without Deadline rendering. Cleaned up render elements. * Revert changes in submit publish plugin --------- Co-authored-by: kalisp --- .../modules/deadline/plugins/publish/submit_maya_deadline.py | 4 ++-- .../modules/deadline/plugins/publish/submit_publish_job.py | 4 +++- .../work/test_task/test_project_test_asset_test_task_v001.ma | 4 ++-- .../work/test_task/test_project_test_asset_test_task_v002.ma | 4 ++-- .../input/workfile/test_project_test_asset_test_task_v001.ma | 4 ++-- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py b/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py index 26a605a744..5591db151a 100644 --- a/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py +++ b/openpype/modules/deadline/plugins/publish/submit_maya_deadline.py @@ -231,7 +231,7 @@ class MayaSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline, job_info.EnvironmentKeyValue["OPENPYPE_LOG_NO_COLORS"] = "1" # Adding file dependencies. - if self.asset_dependencies: + if not bool(os.environ.get("IS_TEST")) and self.asset_dependencies: dependencies = instance.context.data["fileDependencies"] for dependency in dependencies: job_info.AssetDependency += dependency @@ -570,7 +570,7 @@ class MayaSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline, job_info = copy.deepcopy(self.job_info) - if self.asset_dependencies: + if not bool(os.environ.get("IS_TEST")) and self.asset_dependencies: # Asset dependency to wait for at least the scene file to sync. job_info.AssetDependency += self.scene_path diff --git a/openpype/modules/deadline/plugins/publish/submit_publish_job.py b/openpype/modules/deadline/plugins/publish/submit_publish_job.py index 228aa3ec81..04ce2b3433 100644 --- a/openpype/modules/deadline/plugins/publish/submit_publish_job.py +++ b/openpype/modules/deadline/plugins/publish/submit_publish_job.py @@ -297,7 +297,9 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin, job_index)] = assembly_id # noqa: E501 job_index += 1 elif instance.data.get("bakingSubmissionJobs"): - self.log.info("Adding baking submission jobs as dependencies...") + self.log.info( + "Adding baking submission jobs as dependencies..." + ) job_index = 0 for assembly_id in instance.data["bakingSubmissionJobs"]: payload["JobInfo"]["JobDependency{}".format( diff --git a/tests/integration/hosts/maya/test_publish_in_maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/test_publish_in_maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma index 2cc87c2f48..8b90e987de 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/test_publish_in_maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v001.ma @@ -185,7 +185,7 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; addAttr -ci true -sn "creator_attributes" -ln "creator_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -296,7 +296,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; addAttr -ci true -sn "creator_attributes" -ln "creator_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; diff --git a/tests/integration/hosts/maya/test_publish_in_maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma b/tests/integration/hosts/maya/test_publish_in_maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma index 6bd334466a..f2906058cf 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma +++ b/tests/integration/hosts/maya/test_publish_in_maya/expected/test_project/test_asset/work/test_task/test_project_test_asset_test_task_v002.ma @@ -185,7 +185,7 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; addAttr -ci true -sn "creator_attributes" -ln "creator_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -296,7 +296,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; addAttr -ci true -sn "creator_attributes" -ln "creator_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; diff --git a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma index 2cc87c2f48..8b90e987de 100644 --- a/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma +++ b/tests/integration/hosts/maya/test_publish_in_maya/input/workfile/test_project_test_asset_test_task_v001.ma @@ -185,7 +185,7 @@ createNode objectSet -n "modelMain"; addAttr -ci true -sn "attrPrefix" -ln "attrPrefix" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; addAttr -ci true -sn "creator_attributes" -ln "creator_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".cbId" -type "string" "60df31e2be2b48bd3695c056:7364ea6776c9"; @@ -296,7 +296,7 @@ createNode objectSet -n "workfileMain"; addAttr -ci true -sn "task" -ln "task" -dt "string"; addAttr -ci true -sn "publish_attributes" -ln "publish_attributes" -dt "string"; addAttr -ci true -sn "creator_attributes" -ln "creator_attributes" -dt "string"; - addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" + addAttr -ci true -sn "__creator_attributes_keys" -ln "__creator_attributes_keys" -dt "string"; setAttr ".ihi" 0; setAttr ".hio" yes; From 70062011f7f052f8f918c2a22897a8765cbb1e9e Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 3 Jan 2024 15:14:06 +0000 Subject: [PATCH 64/65] [Automated] Release --- CHANGELOG.md | 317 ++++++++++++++++++++++++++++++++++++++++++++ openpype/version.py | 2 +- pyproject.toml | 2 +- 3 files changed, 319 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f309d904eb..4a21882008 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,323 @@ # Changelog +## [3.18.2](https://github.com/ynput/OpenPype/tree/3.18.2) + + +[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.1...3.18.2) + +### **🚀 Enhancements** + + +

+Testing: Release Maya/Deadline job from pending when testing. #5988 + +When testing we wont put the Deadline jobs into pending with dependencies, so the worker can start as soon as possible. + + +___ + +
+ + +
+Max: Tweaks on Extractions for the exporters #5814 + +With this PR +- Suspend Refresh would be introduced in abc & obj extractors for optimization. +- Allow users to choose the custom attributes to be included in abc exports + + +___ + +
+ + +
+Maya: Optional preserve references. #5994 + +Optional preserve references when publishing Maya scenes. + + +___ + +
+ + +
+AYON ftrack: Expect 'ayon' group in custom attributes #6066 + +Expect `ayon` group as one of options to get custom attributes. + + +___ + +
+ + +
+AYON Chore: Remove dependencies related to separated addons #6074 + +Removed dependencies from openpype client pyproject.toml that are already defined by addons which require them. + + +___ + +
+ + +
+Editorial & chore: Stop using pathlib2 #6075 + +Do not use `pathlib2` which is Python 2 backport for `pathlib` module in python 3. + + +___ + +
+ + +
+Traypublisher: Correct validator label #6084 + +Use correct label for Validate filepaths. + + +___ + +
+ + +
+Nuke: Extract Review Intermediate disabled when both Extract Review Mov and Extract Review Intermediate disabled in setting #6089 + +Report in Discord https://discord.com/channels/517362899170230292/563751989075378201/1187874498234556477 + + +___ + +
+ +### **🐛 Bug fixes** + + +
+Maya: Bug fix the file from texture node not being collected correctly in Yeti Rig #5990 + +Fix the bug of collect Yeti Rig not being able to get the file parameter(s) from the texture node(s), resulting to the failure of publishing the textures to the resource directory. + + +___ + +
+ + +
+Bug: fix AYON settings for Maya workspace #6069 + +This is changing bug in default AYON setting for Maya workspace, where missing semicolumn caused workspace not being set. This is also syncing default workspace settings to OpenPype + + +___ + +
+ + +
+Refactor colorspace handling in CollectColorspace plugin #6033 + +Traypublisher is now capable set available colorspaces or roles to publishing images sequence or video. This is fix of new implementation where we allowed to use roles in the enumerator selector. + + +___ + +
+ + +
+Bugfix: Houdini render split bugs #6037 + +This PR is a follow up PR to https://github.com/ynput/OpenPype/pull/5420This PR does: +- refactor `get_output_parameter` to what is used to be. +- fix a bug with split render +- rename `exportJob` flag to `split_render` + + +___ + +
+ + +
+Fusion: fix for single frame rendering #6056 + +Fixes publishes of single frame of `render` product type. + + +___ + +
+ + +
+Photoshop: fix layer publish thumbnail missing in loader #6061 + +Thumbnails from any products (either `review` nor separate layer instances) weren't stored in Ayon.This resulted in not showing them in Loader and Server UI. After this PR thumbnails should be shown in the Loader and on the Server (`http://YOUR_AYON_HOSTNAME:5000/projects/YOUR_PROJECT/browser`). + + +___ + +
+ + +
+AYON Chore: Do not use thumbnailSource for thumbnail integration #6063 + +Do not use `thumbnailSource` for thumbnail integration. + + +___ + +
+ + +
+Photoshop: fix creation of .mov #6064 + +Generation of .mov file with 1 frame per published layer was failing. + + +___ + +
+ + +
+Photoshop: fix Collect Color Coded settings #6065 + +Fix for wrong default value for `Collect Color Coded Instances` Settings + + +___ + +
+ + +
+Bug: Fix Publisher parent window in Nuke #6067 + +Fixing issue where publisher parent window wasn't set because wrong use of version constant. + + +___ + +
+ + +
+Python console widget: Save registry fix #6076 + +Do not save registry until there is something to save. + + +___ + +
+ + +
+Ftrack: update asset names for multiple reviewable items #6077 + +Multiple reviewable assetVersion components with better grouping to asset version name. + + +___ + +
+ + +
+Ftrack: DJV action fixes #6098 + +Fix bugs in DJV ftrack action. + + +___ + +
+ + +
+AYON Workfiles tool: Fix arrow to timezone typo #6099 + +Fix parenthesis typo with arrow local timezone function. + + +___ + +
+ +### **🔀 Refactored code** + + +
+Chore: Update folder-favorite icon to ayon icon #5718 + +Updates old "Pype-2.0-era" (from ancient greece times) to AYON logo equivalent.I believe it's only used in Nuke. + + +___ + +
+ +### **Merged pull requests** + + +
+Chore: Maya / Nuke remove publish gui filters from settings #5570 + +- Remove Publish GUI Filters from Nuke settings +- Remove Publish GUI Filters from Maya settings + + +___ + +
+ + +
+Fusion: Project/User option for output format (create_saver) #6045 + +Adds "Output Image Format" option which can be set via project settings and overwritten by users in "Create" menu. This replaces the current behaviour of being hardcoded to "exr". Replacing the need for people to manually edit the saver path if they require a different extension. + + +___ + +
+ + +
+Fusion: Output Image Format Updating Instances (create_saver) #6060 + +Adds the ability to update Saver image output format if changed in the Publish UI.~~Adds an optional validator that compares "Output Image Format" in the Publish menu against the one currently found on the saver. It then offers a repair action to update the output extension on the saver.~~ + + +___ + +
+ + +
+Tests: Fix representation count for AE legacy test #6072 + + +___ + +
+ + + + ## [3.18.1](https://github.com/ynput/OpenPype/tree/3.18.1) diff --git a/openpype/version.py b/openpype/version.py index 6a8e6f0d95..4d7b8f372f 100644 --- a/openpype/version.py +++ b/openpype/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring Pype version.""" -__version__ = "3.18.2-nightly.6" +__version__ = "3.18.2" diff --git a/pyproject.toml b/pyproject.toml index e64018498f..38236f88bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "OpenPype" -version = "3.18.1" # OpenPype +version = "3.18.2" # OpenPype description = "Open VFX and Animation pipeline with support." authors = ["OpenPype Team "] license = "MIT License" From c4dea2c74a2ce25963a796d29a130c8355778718 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 3 Jan 2024 15:15:06 +0000 Subject: [PATCH 65/65] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 3471c32430..132e960885 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to OpenPype Tray options: + - 3.18.2 - 3.18.2-nightly.6 - 3.18.2-nightly.5 - 3.18.2-nightly.4 @@ -134,7 +135,6 @@ body: - 3.15.6-nightly.2 - 3.15.6-nightly.1 - 3.15.5 - - 3.15.5-nightly.2 validations: required: true - type: dropdown