From cd4adfefd27e51cd26422273b78d4f52e75d3f4d Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Tue, 5 Sep 2023 14:34:48 +0200 Subject: [PATCH 01/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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 zcma)hcT`hr(=W;qjs-l31f_~fF%XJ$5D;k+M8FezQwT_J(%V)M1wvB{NS7u-gwR1+ z1nIpfNC^l?i8LXhgamSTc;CC$y=#4ce5~x1%*^x5{HE-^XCC$qe%vqXIeAJ-PDx53 zY4D`Te}7R=8eW%?lasQ0NV}W%_L50njL_=} zb`CN~MWhrADeoW+Q&f~e!W58_b}$7;JEViGB2rO7*0Hjg@#D$=oyu4yp8ujKVJZf8 zT>mCBF!2A<)l^3WPOjsbfAAVV+n>u3dI@c^x4Rf|2@MsG>8gLP$2M$i#^GCVbm9hu zQ)`+7Z9F`5)%Y&MjR*N~&*x8{7vJG}!S(C~*Oh;+oWA~eki0bWk7SEPZC_v0UO%zX zfKRl$PjPtHm0aNE!n3LH_Q#xr?cE`ztbB1wj6UIOjF@k&aa%7=qrAvBl+K&g;+Il<8lM2S z0{S4)axorpj+Vdlh;CJduCUvk+JfQ_8S}z&iy%8a`#IRJPvcQ=i@Mxw^EOdJos)CY zsg)>9+bP%EG9&ZW&T4zcmki06Z&@mr9}Sl_j*qTS3!O9E!K}HrY+RDi$(DD13fC^! zMNluI{B%-z+#Tl`&@phUcP6OP+PeYy0QU%4I_N1}vtU=OM_`!etZ(OmQB~dPzYqe@ zuen>0rTAoj#UEpTorK51t)d_$VQ}Ym_E~59wvfEj)w6``s@K1+!4#OCH3p6KufFfY zeB#27{kr3itg^3Cmr<~g59T~fE`98N$$I*E8IS#i6As!A#giW*@v5bimOEMn+NBGm?vc1>(YMEo}cHu>lPIi%NP)^x8FWz6s z>h%ma?tZ76Vmb=Rw=WxA9{-uC&8=we-qcRP2<2@Dl8nIB!6!mWpPdqI!npDZ7ndvx z;@AFAgueO|=?g#0<;0G2nSC0e04t{66_eo}{+RX6?@ovjQ>PGxa zzv2v;%ME!p%lh(C;B(ByYOj7aH2l?~3X9EN+Bn8Zx078{3vqXOg_|W@-#jHtV{)SW zFC#XN5k;;`)-%5f(Y{aGE#ifvVlasVqm;bD^mDzb@q!>}sAf9rd=m;(=0))8{lj4- zkXft_3-lMn=QaZMg10QnYjQ-&9u|KO2Xxls`?NqK^*6-Q$K~SA>D$!daJwa0F8a;iNifUSbstdVeER=iAOJAg3~zZLpn3+QA_U@`5X13LI?2Y7w0NB@Y4kc9fUbQ~*z(sE zXh}>@KNI`yS+3w>j0`{e^zm;cBScyPT=E^m!Pw9h(BS`bU4G&N4X4Xz!?dO{fQ-$kSr~tHG zXVEw!I+Evcir;O-8~aQNh>zRgMf6hMc5F-Ao!D}i5@<^!LmpxmYQRBfR~@rY^FlZ{ z*UjH;9ex56)Ez2E=AL&vUHYS3=A$0yrtN?1*iusb20L-$oKyseMR3;;nn4epy?53cCUz1i`Z9-!UW?61L~Hw{WOdW0v- zD}C1I{Uo#Ljz1mhU#Tkt{Ru!i?r(Uu zXe=}MWPoT22IEeAuS{Agw%ZoUmJ|mSXhwE)^x6$Sxw9?A9!IY!qnz@sZFaU)Y*Xxc zI{9d>qep4J{I-NvL@fKUoMyiW-3qi6zAOxSn0trT(GAHRme7dfq)X@c6Oy98TQuqn z<~=a_+#LvjJT{J*@Ypr$13Q&Rh^~&TOBEsU=O^C19zIRR@exr}+d=?X(Bsn4BbwS(pLmO0gX%fKc5k`)d6wVK-`)Mn^ z)W}zg%9$XPbI{UsGN+*aRubY_HZ65?(#p zO49e=ld4`7kL+~NCf#4SivTwT+PhIp_upqgG`y^S>_ty$RN@>5QrZ21``H#7sx_am zUk7f+A1e>FahiMGvpTW)iR<(jQgNqIK zn+2;D#*={tC~}X-w4)H+5Gza%Ghs*9$7@dgG7(j_%ZOuLKiC<`7;k+*$d=vxbyKxu z&CMzr%s(7^A4puxGj9)Hm#yEtkJYmYmZ>6+OAXFiHh9?vBC=v3vdwf*1)RcNmm?+W zxBl(vNGd(2MYW)`ob5fR+P3XTp(7$q{<>t-)4tY_z#^=oR-T9nT~5Wl-EkJ|ulyb> zeGI6ed+Svz=hRkVq?T~(nIuPjiR;jS#%;j2s{>t=*{ju&daS6Y?Z@Z01~=>t{^q{r z6D0C`d`s79XmrHZNp|T) znX~#J<{MD*I?Gr$;3=AR6YCeJact#7w`2_|(vMp7XsE67D-k;=c3otzKU4tNGJOz^ zD3xOcl*3uW=#NWkzHM(7K=Px{;cTD@6;$l0U`7`;?MconvLBXvr(VIb5jU zsbLMwn}7EEBQ+fsbiyq|t|1+Aw-cpqKtWuYs%-HehjP<3Fbd<$SN5qUq2fnBum{mZpxY2va@M;35V8~5k7-gBRC z-^$66LBWlHS}#~uM3wuY{c6h+VXs&u}J$fDW@`VFkTwA)@=m2Mpu zntcP@xg6kfM4LJd&_V`(39eXi`{k=3ER|Hl=khL4WnW@?!7I}!A7smiOj*WjhJO`v4x+*bNm zIQt->AxSJOa_o`R=?O-u7nP-FCn6pLQ+0HVX%XR+e)&N_F3h%TKv4`SU3z-rtZ7^J zjLx!>pcrA#TX}PQc3T2)z58_S!4csl=uQXkyE|lRvH(THDs*}JQpF9(I+#!FkI%m9xgXS3GjY97#q{edtH)F@zlJ3zaQLN$e(U_- z5L+=MjfN5k+0RI93fDLa(dj6Nh(mQ!JeL=}4QzEbs;&1Mh;KvZ*e$s_!E!{{mu=!k zFHD^2y(K@}4mE#_PRtB^*kwa?@3Q$^@9zzSR-M9?jO)*DHPJp%>$@vcUaS>{ymV`K z_oJ?M3IWL)|rG*d)c)z*bU0o4yZe=#tcyG}lat&M9L5twl*xf%xHU(s! z52dXN8Q8o9zVA>L?$nGz&IZ^piIL%QzWwSQ)nFYivXD4ZnjCW=rS%0&FW3HHU#yiA zi3Z~5v(|(4q{sF76y6HccaX6F`#B4D3qW?RrDwtZ)tP`}!i80K9(mL1_Mx<4}o038aPpuu;S>d^Pq2h$zi<-;`<5}{% za&hn_FSYC)(IQ;qE|qRt&#^nbxinalZ;1@q3f4PF6IB@}`rKj~otIMBNlauhzjo1w zswP8Hiwgj6Ghi}=wa~iU!oT~x#_rZ!yO>+IfBLJnv4uNwln&~sp2YNXE1cH;gx*47 z(yE64jzNsd67Ar1qIJMG)WqAf%v^h5kyUN-#B=+3%N_P4HhBegY4iP4(NfG&*#)b( z+qFA;W7b+;<<(YK5T1fIi*c;~u4FC$dATYvY{xbR1#~k-XviH{ZY2#HgBJ&(xRb4; z3C#Ms62Kp}KskJ}ZNN&P97f=VW;XX`8#C{AX|JWLy;fV8+?d=hXci0$_E?VIk6y#! z(l*+lOLgKn->&!{DzxkGj>v?;tq$*MR5_^5T@hF~+7SLN>|)?W+j| zn)xeI$Ct9xlw44Ur`&Y2Yw`>Rf5)oI(Ao^Yl~0FFCB`Yj)Dj5nBeOtLV9AyQ80_Lf z{08k$YIN#&dFU8cV)0F4~VKe=|g*VmFe2~!jmXvf6Fit zi{;jaeC7_Z{1D|gw#7QRerYVys?Fta7Vif zZV*yyR$A%Obzjvf3$`m7cy_zdazyQkbF<)KPcP?_(2L@f}xH!e~peRNyi% zUj@tAqqIK;!i&lr_dEh0uUsA;S&9V5MnqP$oFoR$-8EjbhUdd6i6Os^!8`=;?&+bZ zLq&Pm%1K{uTfZIr&_4i;rEN}wLh{0^bVL8W@(8)Z+7jC`OT)W9s%WW z+O6w1R-EM*#_+*S&19pVP#$q;Npw%%aLBoj516(zV75qppu{@k{`sA-1?l#~wyc^T zYQ!mWb+YfOhjMLbk!Q&p2$8e&?}@IuI&8U}6fme|U&VS5%C|L9oer^}onGHt(z!w0 z3L8cmIjcf}coSL78U8QKRi0D3Mr2+)g2|Y#-m01>!pdp{LXnRTv_~Co!KUqS;URtp zzLKkxR9B!d;gjw3?0O~bV#QQ^ZyvpU@LXMGtdTc3lbz(MxfcZ|8j&@sD%6cvf-HoB z3lf=+M*Oc3k~Ahor0~BjzMX7b_6OVG6!Q4LCDf3^^+xLFRO?#tjm?{(cf;q@@B^71 ze~B!0yy#wn&k=nVR|c2{zPlL(RjS3n=OXq}fC4u{R%r;&(PAPCmtmh><9r3#RD+N` z6@$~OpMqIO4W6m@sCYmn@>iQS6Mpp_h@L#t)VtoWq?beVL9ZCl^CRaqF1pTI)Hyha zt0xn?+o}1u!zJ>42Eu`c=n*U7Kx~ z%mxqM=D^j5QmWgQ-6(Nr)K&B2eON$bLH63HAKE0$Sf+WGr-wg$xVfRR2Jfpn{sJDx zw0w)G4HoUG%V3pBSh>^G3&q6&!6PB3iMn6_d~F8S zGitAm`IGe@1s%KzO_?>GnV^|oD6|Y;9rUT9jDC-Gz2m>dc9_te_+7)lRi5ZI7GS>d zsn&weSv5Kaz+A#``>lmckIKHT(zUP0;PzM#>sSI_QLhFYsqGY&&_=B-l*38uG%LoG za}%}AZ`Bl1ZHB3a%#G(ATgD`@pf|xG?~gv)&k}5A?bPrVQ+rEoc^WnSLPXm-Q!^nT zSk*fH#_!UigY{uRRS=1ikfW)MbJm=j$P`{0e+Yc={h2OGo8eeOgY(cP>xhKk{z8fi2ohxV@UORn87j|ghB{}$`Xs;! zdWQQwN`AjJ`;4vUWwaVEZPJfya7ZwJTlEwd5=YGxFPT{`#(X@tFrKs|JB+-_9De6PGU>Ynvk76 zqa8FF1vWirruU6TK5SY@_AQ&hTh}iT$Yr<%`I189`@hK@I z&x^kx&1MIh$TwA&-(60}f+F=q{;1Z?2lK{PTe4eqv%~sNoSVfQQ?=Hb@kj`v9-Lr-DL6 zI9hX7;A^^PopEK&m9AZmHp`dfHhPz^pcgw#(>=qk5DZh3k6+jBR8cvG`e#)jgzVB; z<~^vT_m18ke+Rg{IL$IN3nF+O_`pUN@wm(#X>VPeTKp4E=_2aCpqDB^ zm1M?sQOGqT!d1((ad7t{ONAi#--4?kV=sN`Ka4!FJGmo~yHYr?_l@Cy=xQFSS)iw% zkbHBH&QM9lRqsc^Ih9*(fnDE?4Fw>4I`Rdk-^Sn1$1-jnc zlpza_wFT9k8$2i!hE#T~vQ1?neS_97{@Iw*anIb{x07s~P!O8w3&sf6}>T zbe6uB1`aGy@U6~sMg$Xs!C{L?(T_dJZ7|SAF`i z`rvzX(ewi`Xk7tlso*Lj0e-Cc#($Slo<(XR-noJ|Jcp6<#=Ed-PJFyV0LHKp{pZ#Qd=dVGnS0B24tC?qqRvHMfAV_I=@J?FddZoR+k)qw+r2X2@Us}N;IYM?voQ)%&sCMm`Jl<1T}WmX8)cb?Sr@5>PTH0pNbK;C*c`> zVdQL0E=!+Y(#-Ws;Mw_wB*Jx;|LGerIzi9vDX{+jdj;Qssv{V<;(M%FKIJ^ASAWRx-)N$K z*U#h{^U_PFx)V$!Gegx&`01bZWEWDjM|_XVFfR*V2J#LmY30cc$>D~)7Q(;hZgXC; zvK${dsChyfo$QClm8RB04)1CY8=1=})kQPP?0LLg$(d|vuH99>U095L>>L(SddhWC zezbn7+NcPKbTC_I*I{_?-l4e(3yqTyfTA>M6F-w-45Wn{2P}U%!Chco1Oiw@L^ADwnh3R9v*z+P>B4q(d2FOf8UI4;Q1v_N&7o*F#*$1vG z42RpkRXQB1IS6qm@z&RhN4|OymbVy5&#P2F9DY$n?8?4{>o{c9iLtL+PE|ZiKJl02 z-r<9Vyr$d&=;!c&FUqMn4!jBFov`F>Y^t#(Eu5eCLJ5N4*Pu}oZUgPD?Wg(sn)^PM zk*n8G>$Sz69)fLPOFW%38)SNI2X?wYhTkM~Vfu*o^kRC;CP(*eKU)7VuuWQL96GgI zQsU|yM$sfSPvXl_etj0}f(l7~!fr`_m^nF1NPw;>+NjvGjg0~P)784KS$gN;^Zx@p Cw+%{IBwhB1uU0ly!vcTL^=U!e~fj%Ubp&WP6qD8NyhSZKkP_eVrOxi^3$r z&%Q>s7|JpX!`yfDyXXARJ?GwY=e+MZ&+>h~&*!^6@Av!6u<4Fj74hh?%W4|R3K=~| zCI4$tkD80#b#ha6bH1!1qpaj2FXQT>4LGHJ z8s(EpB=&yj_3pjdTPFEEpvMSEB&Wuy9oIz=WFTJ$Ti(38b&W+?aX0ecg{%L-m*Q}j zfHU3#69V5(|L&HQyAYJ9mO`2rD2bI%;E_! zOSFO{-@VZ6(Vj?dCbUH??xnk#;ki-lwhbxRhgmWKR)VQ{{m712&Y&E@vg0_gmmGPvg z=19ww2mCf>mQH}Z#?*L_E@8RNB3{RGtR;&78|CiUroaO04OZ(e@USk^s$U|842jnYC@ zKKczhH#h2jKm0K+NE8yUqSn-R%TAvpAcHq0EmygH3~-k*Z;(iU{eV-vV`7#WG!4gI zvaTvVKl$}X!^H%c1X`iugJz0KgLB;t!sopXam>2)rqkFND0UHdW$gWXnA|U$F=VgR zl3Tov5^q-W?j?;AXbV3CVDIf{jot38^lJBL6x?0kYUWFU?Xq}>jB!A*9XKV0vIDMi zmv+gYo>guRx|b`+ex)RE;WflOsOIL^AC~Pm__$^6**?Z4uym^OQJ>eyYQ@*pl8&P< zKty9OCeN?f8mrza`%7@!d+zaT5HT-^I0#t{*dabj-G%yf=0~#6|W31l@O|Veu{Wc}1yl24Lp zr50_gz{Ue=fPi>cFIH*GiN%=aO=ef-=d709fg_+;VjoM}kOr<;$tR)Zw2U+aZDA># zAQS>z)-QQ6mfh-S2GZ298+7}f*DrbLdD-C%H@pO`+k2c@KC_#(_X8-7Wu2G9teg$w zs6=zfFF!a33Sv`E&Q(h*zSBqAi%&|zA>d*7{qj?HCG+p~`W!CEvP~(@6nd({O=nj3 zqV4u7OHALpGC7C)#^848pzuB$G9Vcd`%#Xt!Y~U7e#+u|D z)(;-HM8KQk(Ve}SqigSVRO$_!Mod6@+a`>h!|kp8`r31j(<;daS{j7PcRcghyn9xs zx#34}l`hr(LAIPd6%kMb^q8YP|6t2mPti-vpz;~Iq??b_^o9WZ`4=JRqnBIr9PK?F z<0i!pJ9E#(l`rcTa)3-iYb`N4s+aZM6TwAIBg9@owyy8$pmYoy$;5oHJwk8)A20go zd63U{r^8{32HbEi18AB5`9hCf1tDEU0ROx3f6Sj<4AwjojjMw|R7amN>`q*Qd^2)= zEO?@53JSlc4f%ll=erzTjQ{Z_u(+m81n!FWM)h_qe(~^9l6o$n#g&p+k%CMjKh<_@ z6ag`9#QoIoeO4d+go)}K6k1mRkP<=9ZRXGLMkn)~?0ozpqdVBk0R*#{pHp@&e{d$J zX(Yj;ij)FUO$cTRVkE`{G6{Q_a<33NQFoC5!u=)weP$%~p?nS`}n0Z{)X zWfydYYLXfE6HYN>eb!>H*n=V)AYf-Rn@!GS5(J-Li95{=fXm=Z=H`QPx6RXUVNf=q z*Fl(|yIYteR;8Q}>C0n55r0SeUKK@DzSJ$*yPub;48{5&aiH)@JedO~LYXdMN-v|G zPk|nz`tUPS6vE1jN|rv2`kC_>sYz(RPFI=P*fXfB$m1GUgU1%Cb?;|Wf8{|S-vFaI zDa~};B`881aS1ZS)0`q8j3Pg!v*zN-oRB`7N$}RJZWfRLF(nWm$0(?U6{Fz~aT#OX ze?XLvaZSpQi_(0Vg#FlKbWx;?%;T)CNOnH;7%}xVX$LW~pwn9wwSykPU55*hbS;Ic zK>SYwXp_elc&FPyL;37A1T@zEDe-v3!>%g2jtwHE4%I|1 zy2R5wj)mu1eDPj=3q~jh$_Gir$+E#FfD^2TTDxvOxV&B@T5C&DkaGg@fX{6|gwOIL zoah2-OVRHs=*9^!{6DU*g-*aG#6JSy!IgxolaNe?nr&JmzGPAq{mTw%P?!LZ)MHp5 z9w%M8*=+bTQTKT&!{s42Yr_rYq%MKW5@5^d^*kYPdo$tzulg!T2E{^jM_#taSm5L6 zjKN1q7}a_l)@qVpPTxoz!atlFrU>y*i?X~vIqeL51hq&%-K@>eCKqt0tL8`^_AfwE z4CW**C^&>4Pd;Qs{CLdO`;T=I4@QJe4?YUNad$+7fT6^0EBeL;2&S`{G6v39i|}@WnG*N4cixJVO?_TK>opg zwZuHFxjTL?<3DH$w4#$Gc28E{`)OZvnKk4V?Tf2*DFQurtJYdULNzc<_Go|+oWanKC`KDhwGFj!Q4Y1`&{a4vPvZv!w% zjaL^DjAuPicJB84@%-HLe4*ymt=gRK*tzrn8StUAdE5h0NlsJN5j&$;8DWCx_@DKg z#m^jut^=3KczV2Q8j%%tAyQXl718+Q|Ab$LQzHN9sw>A$4_9r^;^W+aZ!Z)jR$g@5 ztZKZv=@6g4!g`SPniN9$nNG}Sb}oSJ=TV3?VK*r}Eug70!7hva{>Er_2zgIc??pAAxU zC0c>s98lp)SRA$bx0B|hg>_rNU79XoA1BBaVt5qA72Z-Q{kd`hCa1U zx*d-W!2gAG%Sh}LVJ*bVV5$*$!l5w0q!@0@@pV;bq|@?g$bXQCxV9sB*rtsHrluX3 z#dGta1cjQl9m;9~;SXhP^sEmz;>WBvB3r^mPi-sxOs3W^y)@CJY~7lG|Fwr5H%e_- zWqF6S{EL9Fiu58cYPWKrzZSA|s;axSYdQa~>rQZ?ss)A1X3b9Mix+SggnPS*=)Mb? z-=HM7rgt07!QdrLz&71sU_zO8CL0x$##GkUhfWqEaP|AYb|R#x>rMSpo_|dN0|l$m z?cJC=_r`s*QmE;Zvnr_W8$vB*WW$a==$!6fvNuL^9cS1Es5erb%~+h>t_%$p-I0$B zI7#dn%{y-QhZbP6?!WppWn86jr!otR zpK6NHXyqTLXa)UvPP)^<1W{fyx%xA=-%E4zzM=4b-Ra+rsp^hwJ@r~U#5YGfd@%a% zy4Tar1otmb0PeMY%P2N1ty#+b36VO{o*H(Yj#DxOA^ucbEHBV5!9P*oGw1=6SJHVG0~P`b}x~IVo*=rIBV@ zv&n7q`Rl=@J-7m-3SYq#Wkzh#@+Z+A!j(!RVg z&}xR8o^sYBt^6!u)l<2lx<~R8!3D$m+~OPUH0UNSu1Z1cNQBf^{JKZ zkEla&1mGhP%@`iFvibVYyCRK06VjT)ygLe-)pR^_&&$fR`lP>%ZVj;P=sxfvxSe6z zq);~u_voJ?7Qqx48Jk*}+wA@QeVo-qwhl*4Yrz>Bdjj8fi+2!K*5o&_e0Lt0u$>xlayT)9S(tN|Wq&ajW}-NB zLr7bq^>|^+`Y5pQ{kwa5#QoX~dW^*)p<-hX#!^+UH2oU1lXk(hAUXx=_V{n^MhgU-H8aLb&OdFzlR{807 z2vO=Q+vc~Gs6RJ0mf;~UPS?nJP3-oZpI~WOAOnSG>2_jCgf+C2zq)=s`4B4uH=eA% z-VwFAMMVeh8eg%KSloL1vXvI&KG(B%T|?C+K0?YRChNHO-bt&6dziymm4}b`<#Udz zbj_oDVzm|;DYY_7XGiRtCevHyVLe+-T=)-lZ`n-MC0+DyvB!GR*iY@59aNM2-Q6uFNTe}2f9BWfNU8XVx=Q9(7X9-}(!=>>m# zCg*aqTlf+^6RGo!=T-gn*lTxAB>W&fEoEHJWx33zE6vvBSsJPFW(&b5?9}X!z{YLq zYOZfVr4I-`0ox@ad%s$_crpOCp%WvEzU_(_>6zSK>{4kv$Du%tlk+=2hFYg|G<5>6 zO|1#iOv@df|J(as_)I=)pt&pK~xh=7!{y@#tcEuXn!F>W}X%2}%?Gw?Az*DbZ z-rwjioZTYr9tI=_Dj4cIZX1P;Y9jx$U5Iqpk$9W;EGvQnkhb+zHhxjdN-RuPjWahtlT$0PV*z-xIIpe}%0f*hr-va z?_7^7=cvhG@2bpgQku5JtnqNsEqTupfxNx=0M}Rb;#~ZIcA=Dybwx9*!&JkuK#Xh> z%DUcU(x(#%ZxP*xedVc*?E6^A3`nKk25jCr{ur_yGc%{7!HyJ__5UVSEqUfEHAMkI z9oo$g{rxE&ztilC_+O2uMK$Q-}yK%O@I&*}d={xuv~yc3=}_##doPHS)(3 zWfetTrlw>7Uz1*wm7Ye?ea1g)!1val|KKor8>5CL>(TQsWW3;o*r@;Z4hQA?&8_##57&k9=h(aer0ktS0Me>jpPL^Q1aFA^+K@_I zJ8gomd1Y%udpJ8Ylb$u)8r8OJvXbii?WL{#Qgzva@^xBZH&7Y8K zLvnqix0jHm!L*U>acv#`T)XgAnER?%9(TEdigfLiUj}$#}P`X3c7}Q4c--?gk+podckdvxYm{^BeB~d&}7xsfD3} zT8bs_kn&#XVbV*?iwW>3;c+OFs|J=k=Cg;*DkV)FD(jaupnSVaJsNi_2g{D1u2@@1 zVqmQOTg}0=B&7`lVYF`GnW)zFoXO(#Jld%d@nseA3)pU=j+WD8w~ntyEesE91r|Tj zcy$hn)9emrspTuMTXx8*MNG@{5^Oq54_Q{Jng#tC7dGct5%Nw?_ zD`ZY!-ShHI$j&?wPe9OZ5~c+4XNahtVe~3kmZ=YE+Lo)P<)@X?UWt+W4K{+u^{%8P zlb2Q`%gw3tVoP#V-KbAj!x(B$u0`C-m!W_6vF+$H?9|T~cY;eov-bP`{y&xW8MJ>3 z3k-}IsS~9OYeDz6G#nV&>}{CDo6mUy6zm3GPN+U4>WH>oU~Z`4Ktuqapq zD{woNj!8mW6rsTXbE}3nvX9eoCMcj9JEa;KiOgG2y1PSF`3I z0wWN?jxr%Mr`f+VJIFAt;@wlN@=wK@q%9qjkoK28VM@c*V3ps;4}bR-V2~E6A(alvXJdkepj&XKz^+7ZE4E1%3kuRR3~o;L@i|N`(>XCE zF`Iw=A>jQ~Iqs=KlVtUpx+(p<=ged~DFb=$F9Xgz!;Rl}RIWlCM7qbVe5lnUzt_7) z+fQ^4?ziPn4l0Lr)3(6H{^VLAEjhsR=T-0o5z3kjHG*k+t-b|oMX3

~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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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/49] 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 ee8a8caf48e7de25dc1dcf2d88a2ac7337ba4a89 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 20 Dec 2023 03:25:01 +0000 Subject: [PATCH 34/49] 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 be0a6e1299..fd3455ac76 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.2 - 3.18.2-nightly.1 - 3.18.1 - 3.18.1-nightly.1 @@ -134,7 +135,6 @@ body: - 3.15.4 - 3.15.4-nightly.3 - 3.15.4-nightly.2 - - 3.15.4-nightly.1 validations: required: true - type: dropdown From 09a7ecdcc611c9db87fbcdbfbc1d274057e999b5 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Dec 2023 11:18:25 +0100 Subject: [PATCH 35/49] 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 36/49] 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 37/49] 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 38/49] 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 39/49] 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 40/49] 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 41/49] :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 42/49] =?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 43/49] 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 44/49] 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 45/49] 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 46/49] 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 47/49] 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 48/49] 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 49/49] 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"]