From 5ea030eb4b5aa56245b9e7cfed2d731b141ede3a Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Thu, 25 Apr 2024 19:14:00 +0200 Subject: [PATCH] update ayon_lop_import 1.1: Allow users to select folder path and products using some actions --- .../ayon_core/hosts/houdini/api/hda_utils.py | 76 ++++++++++++++++++ .../resources/otls/ayon_lop_import.hda | Bin 41729 -> 83767 bytes 2 files changed, 76 insertions(+) diff --git a/client/ayon_core/hosts/houdini/api/hda_utils.py b/client/ayon_core/hosts/houdini/api/hda_utils.py index 25a896ca17..6a0f1c87aa 100644 --- a/client/ayon_core/hosts/houdini/api/hda_utils.py +++ b/client/ayon_core/hosts/houdini/api/hda_utils.py @@ -412,3 +412,79 @@ def keep_background_images_linked(node, old_name): if changes: set_background_images(parent, images) + + +def get_products_menu_items(node): + """get products menu items + + It gets a list of available products of the specified product types + within the specified folder path with in the specified project. + + Users can specify those in the HDA parameters. + + Returns: + List[str]: Product options for Products menu. + """ + project_name = node.evalParm("project_name") + folder_path = node.evalParm("folder_path") + my_product_type = node.evalParm("representation_name") + + id_only = ["id"] + folder_entity = ayon_api.get_folder_by_path(project_name, + folder_path, + fields=id_only) + my_folder_id = folder_entity["id"] + + products = ayon_api.get_products( + project_name, + folder_ids = [my_folder_id], + product_types = [my_product_type] + + ) + + items = list(map(lambda p: p["name"], products)) + + result = [] + + for i in items: + result.append(i) + result.append(i) + + return(result) + + +def select_folder_path(node): + """select folder path. + + When triggered it should opens a dialog shows the available + folder paths within a given project. + + Users can specify that in the HDA parameters. + + Note: + This function should be refactored. + It currently shows shows the available + folder paths within the current project only. + It also should include a button to set the the folder path + parameter to `$AYON_FOLDER_PATH`. + """ + from ayon_core.tools.publisher.widgets.folders_dialog import FoldersDialog + from ayon_core.tools.utils.host_tools import get_tool_by_name + from ayon_core.hosts.houdini.api.lib import get_main_window + + + main_window = get_main_window() + publisher_window = get_tool_by_name( tool_name="publisher", parent=main_window) + + # TODO: `FoldersDialog` as It's highly recommend to + # never use inner widgets of any tool... + # A dedicated Dialog should be implement using `SimpleFoldersWidget` + # Note: The following dialog doesn't support changing `the project_name` + # But, having a semi-functional dialog is better than nothing. + dialog = FoldersDialog(publisher_window.controller, main_window) + dialog.exec_() + + selected_folder_path = dialog.get_selected_folder_path() + + if selected_folder_path: + node.parm("folder_path").set(selected_folder_path) diff --git a/client/ayon_core/hosts/houdini/resources/otls/ayon_lop_import.hda b/client/ayon_core/hosts/houdini/resources/otls/ayon_lop_import.hda index 7fd225060dfc4005a4c6c94d83e90b7fcbb10dec..58b2732fb9287c33c6615d5425409fdbb90a1a60 100644 GIT binary patch delta 2399 zcmZuydpy&7AO8)_C2~I#lH1%{o605RGASx^LhhHv%re`u$p}L-lreM7kt8~Va+WTX zOPXsVD#UV4lF%uwI*Rjio}TCV<9R->*YErNeLwH_`*Zu}liVqCm$gOC+11e-_^*kv z|&G% z%9i~>MGB+KG? zWsg`2&Mk^e!9~#sIO>1&=7Rv>1VQ{efCrgOq#~%{IARz8SZsjptbh;>%prCdN2CCN z)iU`1<c<(m8}oa*o8}L4wsX$3#Tc+)EPl>;4QU?G{T5CzFnmL!*fx#cLPXjuMC| zY-%wiM;sAH!-WEXw>>98L~W0E59n_W6T{yJZwUa~N3HzjixT3$8f<=VTg2KqeP+U|H1xpLJ`d=5PT*ees?dLufM?g4yMJ>&6ax{Vx9%*2R zz~g8^lqj&p5E?Zo5=V*-BG7P=oSRZ`&hpk}?jyI$+_w!!_duP0n(!TUT=aK(KUml3rb-1}Du} z>e^}~%)fc?oq%i$`K)g%R=Bh4^oLgi$6ZXAD#LW*cvalqQ!>WR32!nNFUka7FTS(T zf2K0nk6QL|uW|)al4r-boRsLay8oE)OT}JlhsBZmqm%kNS9uMs=oNltov?(4>`H(yN6Mmv4-m-)d!ibof@%HcBx?y2)T zURtM+8;ER2!_O~}*UO4ATRdff1G7h$Ic*j$mV$JIwpQ6oWdZYB)LU-$g<}6Jm0Q`n z91{(R?wZnPRwAn4t0UKbbX)YOt)o|+^4(>^R3?7 z-M*yuZ?~nRH=MsQmW@>h`y#4mV--*u*WKBpnBtZ>P{i@hCL14+Y8e)+UCdGv+EbvdGu|oN%BV%#3!e562q_& zd3VLhPc+ENz@(~Y26kjUS0+6TzV8^(Cv6Y>4t8vIftJZo53VMtjb1)lRTZLUW)FST z9W9$JsEA?iX1(fw>94R@LH7r;Cz=sM466fiR9f6e;i}{0D6NrN0v~;tf}`_#F5LIL zsi#&Jc(!p#V3Uv)qewL^y%k_>-zia2g(AdSeACw0Hro|*`eNE|Tcnfd(%}v{^-Adz zwDo3}fI&uEv8(jS5=HKI8Kn0wm=E{lW!|=89by_1+_GARkZz~9$1fsEOnYbBvxN84 zAqp>shRPZHtkHA>Lhi=JLFV)`Esf>yUTv*U$*QL(hMw-$oHUFu{`QQTK&!V!)8`$S zjdx1|d9^T~*UO%l*h?k#-9ph~*84%RneS=P9U}~bnkl!zQ*dh!?%LW^?)WxESGZZ7 z8Ee8W`H&G*G%hr&`+2cyodq_2!2;4DE~TWh!1K^i@Nh^;E6md;iB*C>p@8llRAEytPaQhpf4*-p@VwA}(*EwLxuxFd zsTzfu6J*6y`SFi7E=36=5{jd+z@pF|C?n>j95Fe1%aNVI1f6?%@wR@AHuOZPVy)GQ zNBw?@lEQW@O57RzV1RgGAu`0Q{C2#t9p1inQzm?hUNMETA*BVW#eeYd4Ydb z3#&v4xhBf#oz9Nn%5jY!D^1?F^G~WSHCBXYwxl$BGlFp3cAyuAs7|U z9EbaiVw(26ZRPg+KA@c|psdVjVqk)EOCe_8)7b(KjW)j`-ej864}+Oj)Xw z*>+~hFGF|iBsV{Aq9N3?CH`4dthw+)zPi}-+{x;|uo0HdiO0rI>M#*u+|LX@C8MUm z+Q`@WEZi}}dYIC5^C5HiT*0%Z)`pY7U%8GhE6Te{<4cq{3sD{z-MF*-MX%{k`(*bTCCv;L2zMmomg^P zHHNrP^^1G(`}P%b%*JIEI;v2W%46EHcUO3!hL3Ox4bc@cr}?jtDEq_2py?m!y5H#pV1Q& zt&z!x;5n%o?VStfie&ORvq9_hA2VNjIQr){fWRlew;kaUEu%%nHrFZlz4e&7riqj$ hX#aoRQKbx}z;&v{edm(}m6QVa^rk_$Nx{hue*;kJAB_M2 delta 77 zcmdnq$J%&|Nx;+3C4vC~m?sK|voV}ZW63j}s4Kz6a1ta1=K0I>fp`lKfOtSb#>rWX OG7}H3+^o-ZU?Bj4(h|b}