From d9d1242eafd4160a3e6b63b1c64f3ded9de9e49f Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 6 Dec 2023 18:32:27 +0800 Subject: [PATCH 01/12] make sure the args mapped to the get_imageio_file_rules_colorspace_from_filepath --- openpype/hosts/maya/plugins/load/load_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/load/load_image.py b/openpype/hosts/maya/plugins/load/load_image.py index 3b1f5442ce..4a309549ee 100644 --- a/openpype/hosts/maya/plugins/load/load_image.py +++ b/openpype/hosts/maya/plugins/load/load_image.py @@ -286,7 +286,7 @@ class FileNodeLoader(load.LoaderPlugin): path = get_representation_path_from_context(context) colorspace = get_imageio_colorspace_from_filepath( - path=path, + filepath=path, host_name=host_name, project_name=project_name, config_data=config_data, From 610ed75aafb1101aadbb57538fd418bbb6bf9acf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Wed, 6 Dec 2023 12:02:50 +0100 Subject: [PATCH 02/12] :wastebasket: remove simple unreal texture publishing --- .../publish/collect_original_basename.py | 18 -------- .../validate_simple_unreal_texture_naming.py | 29 ------------- openpype/plugins/publish/integrate.py | 1 - .../defaults/project_anatomy/templates.json | 12 ------ .../defaults/project_settings/global.json | 42 ++----------------- .../project_settings/standalonepublisher.json | 8 ---- .../project_settings/traypublisher.json | 13 ------ 7 files changed, 3 insertions(+), 120 deletions(-) delete mode 100644 openpype/hosts/standalonepublisher/plugins/publish/collect_original_basename.py delete mode 100644 openpype/hosts/standalonepublisher/plugins/publish/validate_simple_unreal_texture_naming.py diff --git a/openpype/hosts/standalonepublisher/plugins/publish/collect_original_basename.py b/openpype/hosts/standalonepublisher/plugins/publish/collect_original_basename.py deleted file mode 100644 index b83a924d33..0000000000 --- a/openpype/hosts/standalonepublisher/plugins/publish/collect_original_basename.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -"""Collect original base name for use in templates.""" -from pathlib import Path - -import pyblish.api - - -class CollectOriginalBasename(pyblish.api.InstancePlugin): - """Collect original file base name.""" - - order = pyblish.api.CollectorOrder + 0.498 - label = "Collect Base Name" - hosts = ["standalonepublisher"] - families = ["simpleUnrealTexture"] - - def process(self, instance): - file_name = Path(instance.data["representations"][0]["files"]) - instance.data["originalBasename"] = file_name.stem diff --git a/openpype/hosts/standalonepublisher/plugins/publish/validate_simple_unreal_texture_naming.py b/openpype/hosts/standalonepublisher/plugins/publish/validate_simple_unreal_texture_naming.py deleted file mode 100644 index c123bef4f8..0000000000 --- a/openpype/hosts/standalonepublisher/plugins/publish/validate_simple_unreal_texture_naming.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -"""Validator for correct file naming.""" -import re -import pyblish.api - -from openpype.pipeline.publish import ( - ValidateContentsOrder, - PublishXmlValidationError, -) - - -class ValidateSimpleUnrealTextureNaming(pyblish.api.InstancePlugin): - label = "Validate Unreal Texture Names" - hosts = ["standalonepublisher"] - families = ["simpleUnrealTexture"] - order = ValidateContentsOrder - regex = "^T_{asset}.*" - - def process(self, instance): - file_name = instance.data.get("originalBasename") - self.log.info(file_name) - pattern = self.regex.format(asset=instance.data.get("asset")) - if not re.match(pattern, file_name): - msg = f"Invalid file name {file_name}" - raise PublishXmlValidationError( - self, msg, formatting_data={ - "invalid_file": file_name, - "asset": instance.data.get("asset") - }) diff --git a/openpype/plugins/publish/integrate.py b/openpype/plugins/publish/integrate.py index 5bb51a3049..581c0c012f 100644 --- a/openpype/plugins/publish/integrate.py +++ b/openpype/plugins/publish/integrate.py @@ -137,7 +137,6 @@ class IntegrateAsset(pyblish.api.InstancePlugin): "mvUsd", "mvUsdComposition", "mvUsdOverride", - "simpleUnrealTexture", "online", "uasset", "blendScene", diff --git a/openpype/settings/defaults/project_anatomy/templates.json b/openpype/settings/defaults/project_anatomy/templates.json index 5766a09100..6c3e038d27 100644 --- a/openpype/settings/defaults/project_anatomy/templates.json +++ b/openpype/settings/defaults/project_anatomy/templates.json @@ -38,16 +38,6 @@ "file": "{subset}_{@version}<_{output}><.{@frame}>.{ext}", "path": "{@folder}/{@file}" }, - "simpleUnrealTextureHero": { - "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/hero", - "file": "{originalBasename}.{ext}", - "path": "{@folder}/{@file}" - }, - "simpleUnrealTexture": { - "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{@version}", - "file": "{originalBasename}_{@version}.{ext}", - "path": "{@folder}/{@file}" - }, "online": { "folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/{@version}", "file": "{originalBasename}<.{@frame}><_{udim}>.{ext}", @@ -68,8 +58,6 @@ }, "__dynamic_keys_labels__": { "maya2unreal": "Maya to Unreal", - "simpleUnrealTextureHero": "Simple Unreal Texture - Hero", - "simpleUnrealTexture": "Simple Unreal Texture", "online": "online", "tycache": "tycache", "source": "source", diff --git a/openpype/settings/defaults/project_settings/global.json b/openpype/settings/defaults/project_settings/global.json index 959faf14fa..885e8638f9 100644 --- a/openpype/settings/defaults/project_settings/global.json +++ b/openpype/settings/defaults/project_settings/global.json @@ -322,22 +322,9 @@ "animation", "setdress", "layout", - "mayaScene", - "simpleUnrealTexture" + "mayaScene" ], - "template_name_profiles": [ - { - "families": [ - "simpleUnrealTexture" - ], - "hosts": [ - "standalonepublisher" - ], - "task_types": [], - "task_names": [], - "template_name": "simpleUnrealTextureHero" - } - ] + "template_name_profiles": [] }, "CleanUp": { "paterns": [], @@ -519,17 +506,6 @@ "task_names": [], "template_name": "render" }, - { - "families": [ - "simpleUnrealTexture" - ], - "hosts": [ - "standalonepublisher" - ], - "task_types": [], - "task_names": [], - "template_name": "simpleUnrealTexture" - }, { "families": [ "staticMesh", @@ -565,19 +541,7 @@ "template_name": "tycache" } ], - "hero_template_name_profiles": [ - { - "families": [ - "simpleUnrealTexture" - ], - "hosts": [ - "standalonepublisher" - ], - "task_types": [], - "task_names": [], - "template_name": "simpleUnrealTextureHero" - } - ], + "hero_template_name_profiles": [], "custom_staging_dir_profiles": [] } }, diff --git a/openpype/settings/defaults/project_settings/standalonepublisher.json b/openpype/settings/defaults/project_settings/standalonepublisher.json index d923b4db43..44982133eb 100644 --- a/openpype/settings/defaults/project_settings/standalonepublisher.json +++ b/openpype/settings/defaults/project_settings/standalonepublisher.json @@ -133,14 +133,6 @@ ], "help": "Texture files with UDIM together with worfile" }, - "create_simple_unreal_texture": { - "name": "simple_unreal_texture", - "label": "Simple Unreal Texture", - "family": "simpleUnrealTexture", - "icon": "Image", - "defaults": [], - "help": "Texture files with Unreal naming convention" - }, "create_vdb": { "name": "vdb", "label": "VDB Volumetric Data", diff --git a/openpype/settings/defaults/project_settings/traypublisher.json b/openpype/settings/defaults/project_settings/traypublisher.json index e13de11414..7d2f358cb2 100644 --- a/openpype/settings/defaults/project_settings/traypublisher.json +++ b/openpype/settings/defaults/project_settings/traypublisher.json @@ -244,19 +244,6 @@ ".hda" ] }, - { - "family": "simpleUnrealTexture", - "identifier": "", - "label": "Simple UE texture", - "icon": "fa.image", - "default_variants": [], - "description": "Simple Unreal Engine texture", - "detailed_description": "Texture files with Unreal Engine naming conventions", - "allow_sequences": false, - "allow_multiple_items": true, - "allow_version_control": false, - "extensions": [] - }, { "family": "audio", "identifier": "", From 719dee21d1e3b62c696ef028cc3b312ef64ad9aa Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 6 Dec 2023 19:20:35 +0800 Subject: [PATCH 03/12] use get_imageio_file_rules_colorspace_from_filepath instead of deprecated function --- openpype/hosts/maya/plugins/load/load_image.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openpype/hosts/maya/plugins/load/load_image.py b/openpype/hosts/maya/plugins/load/load_image.py index 4a309549ee..27c9ec7118 100644 --- a/openpype/hosts/maya/plugins/load/load_image.py +++ b/openpype/hosts/maya/plugins/load/load_image.py @@ -9,7 +9,7 @@ from openpype.pipeline import ( ) from openpype.pipeline.load.utils import get_representation_path_from_context from openpype.pipeline.colorspace import ( - get_imageio_colorspace_from_filepath, + get_imageio_file_rules_colorspace_from_filepath, get_imageio_config, get_imageio_file_rules ) @@ -285,10 +285,10 @@ class FileNodeLoader(load.LoaderPlugin): ) path = get_representation_path_from_context(context) - colorspace = get_imageio_colorspace_from_filepath( - filepath=path, - host_name=host_name, - project_name=project_name, + colorspace = get_imageio_file_rules_colorspace_from_filepath( + path, + host_name, + project_name, config_data=config_data, file_rules=file_rules, project_settings=project_settings From 0ed8a66fb8130ec2cef4fa47b1b573eaf1985399 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 6 Dec 2023 15:05:10 +0100 Subject: [PATCH 04/12] AYON Change of login should work Co-authored-by: Libor Batek <112623825+LiborBatek@users.noreply.github.com> --- openpype/tools/tray/pype_tray.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/openpype/tools/tray/pype_tray.py b/openpype/tools/tray/pype_tray.py index a5876ca721..db391b469a 100644 --- a/openpype/tools/tray/pype_tray.py +++ b/openpype/tools/tray/pype_tray.py @@ -632,6 +632,14 @@ class TrayManager: self.exit() elif result.restart or result.token_changed: + # Remove environment variables from current connection + # - keep develop, staging, headless values + for key in { + "AYON_SERVER_URL", + "AYON_API_KEY", + "AYON_BUNDLE_NAME", + }: + os.environ.pop(key, None) self.restart() def _on_restart_action(self): From 7a79330d5344d8cbc612909f74deb8451824087e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Wed, 6 Dec 2023 15:40:56 +0100 Subject: [PATCH 05/12] :bug: handle missing key --- openpype/modules/deadline/abstract_submit_deadline.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openpype/modules/deadline/abstract_submit_deadline.py b/openpype/modules/deadline/abstract_submit_deadline.py index 9b31b6402b..187feb9b1a 100644 --- a/openpype/modules/deadline/abstract_submit_deadline.py +++ b/openpype/modules/deadline/abstract_submit_deadline.py @@ -464,8 +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 - export_job = instance.data["exportJob"] - if export_job: + if "exportJob" in instance.data: 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]) From 244db2f18d74cfefe730143550b5d97253a98ea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Wed, 6 Dec 2023 16:37:28 +0100 Subject: [PATCH 06/12] :recycle: pass all environments --- openpype/pype_commands.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index b6535e0835..960e9d410d 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -185,8 +185,7 @@ class PypeCommands: task, app, env_group=env_group, - launch_type=LaunchTypes.farm_render, - env={} + launch_type=LaunchTypes.farm_render ) else: env = os.environ.copy() From f9509f361317aa68e5d830e135ee0802b695e266 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 6 Dec 2023 16:40:24 +0100 Subject: [PATCH 07/12] Deadline: correct webservice couldn't be selected in Ayon (#6007) * Refactor necessary for Ayon changes in Setting model * Removed unnecessary configuration MongoDB is not a thing in Ayon. * Changed DL model to use dynamic enum Enum values are set in Studio Settings, in Project settings will be selected from. Used this way to be close to OP variant and support both until OP is deprecated. * Hound * Refactor with use of AYON_SERVER_ENABLED This will make it simpler to remove obsolete code in the future. --------- Co-authored-by: Libor Batek <112623825+LiborBatek@users.noreply.github.com> --- .../collect_default_deadline_server.py | 36 ++++++++++--------- server_addon/deadline/server/settings/main.py | 27 +++++++++++--- .../server/settings/publish_plugins.py | 15 -------- 3 files changed, 43 insertions(+), 35 deletions(-) diff --git a/openpype/modules/deadline/plugins/publish/collect_default_deadline_server.py b/openpype/modules/deadline/plugins/publish/collect_default_deadline_server.py index 58721efad3..cd4cde2519 100644 --- a/openpype/modules/deadline/plugins/publish/collect_default_deadline_server.py +++ b/openpype/modules/deadline/plugins/publish/collect_default_deadline_server.py @@ -2,6 +2,8 @@ """Collect default Deadline server.""" import pyblish.api +from openpype import AYON_SERVER_ENABLED + class CollectDefaultDeadlineServer(pyblish.api.ContextPlugin): """Collect default Deadline Webservice URL. @@ -30,24 +32,26 @@ class CollectDefaultDeadlineServer(pyblish.api.ContextPlugin): self.log.error("Cannot get OpenPype Deadline module.") raise AssertionError("OpenPype Deadline module not found.") - # get default deadline webservice url from deadline module - self.log.debug(deadline_module.deadline_urls) - context.data["defaultDeadline"] = deadline_module.deadline_urls["default"] # noqa: E501 + deadline_settings = context.data["project_settings"]["deadline"] + deadline_server_name = None + if AYON_SERVER_ENABLED: + deadline_server_name = deadline_settings["deadline_server"] + else: + deadline_servers = deadline_settings["deadline_servers"] + if deadline_servers: + deadline_server_name = deadline_servers[0] - context.data["deadlinePassMongoUrl"] = self.pass_mongo_url + context.data["deadlinePassMongoUrl"] = self.pass_mongo_url - deadline_servers = (context.data - ["project_settings"] - ["deadline"] - ["deadline_servers"]) - if deadline_servers: - deadline_server_name = deadline_servers[0] + deadline_webservice = None + if deadline_server_name: deadline_webservice = deadline_module.deadline_urls.get( deadline_server_name) - if deadline_webservice: - context.data["defaultDeadline"] = deadline_webservice - self.log.debug("Overriding from project settings with {}".format( # noqa: E501 - deadline_webservice)) - context.data["defaultDeadline"] = \ - context.data["defaultDeadline"].strip().rstrip("/") + default_deadline_webservice = deadline_module.deadline_urls["default"] + deadline_webservice = ( + deadline_webservice + or default_deadline_webservice + ) + + context.data["defaultDeadline"] = deadline_webservice.strip().rstrip("/") # noqa diff --git a/server_addon/deadline/server/settings/main.py b/server_addon/deadline/server/settings/main.py index f158b7464d..f766ef9db8 100644 --- a/server_addon/deadline/server/settings/main.py +++ b/server_addon/deadline/server/settings/main.py @@ -14,15 +14,35 @@ class ServerListSubmodel(BaseSettingsModel): value: str = Field(title="Value") +async def defined_deadline_ws_name_enum_resolver( + addon: "BaseServerAddon", + settings_variant: str = "production", + project_name: str | None = None, +) -> list[str]: + """Provides list of names of configured Deadline webservice urls.""" + if addon is None: + return [] + + settings = await addon.get_studio_settings(variant=settings_variant) + + ws_urls = [] + for deadline_url_item in settings.deadline_urls: + ws_urls.append(deadline_url_item.name) + + return ws_urls + + class DeadlineSettings(BaseSettingsModel): deadline_urls: list[ServerListSubmodel] = Field( default_factory=list, title="System Deadline Webservice URLs", scope=["studio"], ) - deadline_servers: list[str] = Field( - title="Project deadline servers", + deadline_server: str = Field( + title="Project deadline server", section="---", + scope=["project"], + enum_resolver=defined_deadline_ws_name_enum_resolver ) publish: PublishPluginsModel = Field( default_factory=PublishPluginsModel, @@ -42,7 +62,6 @@ DEFAULT_VALUES = { "value": "http://127.0.0.1:8082" } ], - # TODO: this needs to be dynamic from "deadline_urls" - "deadline_servers": [], + "deadline_server": "default", "publish": DEFAULT_DEADLINE_PLUGINS_SETTINGS } diff --git a/server_addon/deadline/server/settings/publish_plugins.py b/server_addon/deadline/server/settings/publish_plugins.py index 0781902fe5..a989f3ad9d 100644 --- a/server_addon/deadline/server/settings/publish_plugins.py +++ b/server_addon/deadline/server/settings/publish_plugins.py @@ -3,12 +3,6 @@ from pydantic import Field, validator from ayon_server.settings import BaseSettingsModel, ensure_unique_names -class CollectDefaultDeadlineServerModel(BaseSettingsModel): - """Settings for event handlers running in ftrack service.""" - - pass_mongo_url: bool = Field(title="Pass Mongo url to job") - - class CollectDeadlinePoolsModel(BaseSettingsModel): """Settings Deadline default pools.""" @@ -286,12 +280,6 @@ class ProcessSubmittedJobOnFarmModel(BaseSettingsModel): class PublishPluginsModel(BaseSettingsModel): - CollectDefaultDeadlineServer: CollectDefaultDeadlineServerModel = Field( - default_factory=CollectDefaultDeadlineServerModel, - title="Default Deadline Webservice") - CollectDefaultDeadlineServer: CollectDefaultDeadlineServerModel = Field( - default_factory=CollectDefaultDeadlineServerModel, - title="Default Deadline Webservice") CollectDeadlinePools: CollectDeadlinePoolsModel = Field( default_factory=CollectDeadlinePoolsModel, title="Default Pools") @@ -332,9 +320,6 @@ class PublishPluginsModel(BaseSettingsModel): DEFAULT_DEADLINE_PLUGINS_SETTINGS = { - "CollectDefaultDeadlineServer": { - "pass_mongo_url": True - }, "CollectDeadlinePools": { "primary_pool": "", "secondary_pool": "" From 15eabaf3ad871e134a6732a9460c1d04f1573f8c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 6 Dec 2023 16:41:14 +0100 Subject: [PATCH 08/12] Revert "Ayon: Updated name of Adobe extension to Ayon" (#6010) --- openpype/hosts/aftereffects/api/README.md | 20 ++++++++--------- openpype/hosts/aftereffects/api/extension.zxp | Bin 106275 -> 103005 bytes .../hosts/aftereffects/api/extension/.debug | 21 +++++++++--------- .../api/extension/CSXS/manifest.xml | 12 +++++----- .../api/extension/icons/ayon_logo.png | Bin 3538 -> 0 bytes .../panel.png => aftereffects/api/panel.PNG} | Bin openpype/hosts/aftereffects/api/panel.png | Bin 16269 -> 0 bytes .../hosts/aftereffects/api/panel_failure.PNG | Bin 0 -> 13568 bytes .../hosts/aftereffects/api/panel_failure.png | Bin 13115 -> 0 bytes openpype/hosts/photoshop/api/README.md | 10 ++++----- openpype/hosts/photoshop/api/extension.zxp | Bin 55656 -> 54056 bytes openpype/hosts/photoshop/api/extension/.debug | 4 ++-- .../photoshop/api/extension/CSXS/manifest.xml | 10 ++++----- .../api/extension/icons/avalon-logo-48.png | Bin 0 -> 1362 bytes .../api/extension/icons/ayon_logo.png | Bin 3538 -> 0 bytes openpype/hosts/photoshop/api/panel.PNG | Bin 0 -> 8756 bytes .../hosts/photoshop/api/panel_failure.PNG | Bin 0 -> 13568 bytes .../hosts/photoshop/api/panel_failure.png | Bin 13115 -> 0 bytes 18 files changed, 38 insertions(+), 39 deletions(-) delete mode 100644 openpype/hosts/aftereffects/api/extension/icons/ayon_logo.png rename openpype/hosts/{photoshop/api/panel.png => aftereffects/api/panel.PNG} (100%) delete mode 100644 openpype/hosts/aftereffects/api/panel.png create mode 100644 openpype/hosts/aftereffects/api/panel_failure.PNG delete mode 100644 openpype/hosts/aftereffects/api/panel_failure.png create mode 100644 openpype/hosts/photoshop/api/extension/icons/avalon-logo-48.png delete mode 100644 openpype/hosts/photoshop/api/extension/icons/ayon_logo.png create mode 100644 openpype/hosts/photoshop/api/panel.PNG create mode 100644 openpype/hosts/photoshop/api/panel_failure.PNG delete mode 100644 openpype/hosts/photoshop/api/panel_failure.png diff --git a/openpype/hosts/aftereffects/api/README.md b/openpype/hosts/aftereffects/api/README.md index 9c4bad3689..790c9f859a 100644 --- a/openpype/hosts/aftereffects/api/README.md +++ b/openpype/hosts/aftereffects/api/README.md @@ -1,6 +1,6 @@ # AfterEffects Integration -Requirements: This extension requires use of Javascript engine, which is +Requirements: This extension requires use of Javascript engine, which is available since CC 16.0. Please check your File>Project Settings>Expressions>Expressions Engine @@ -13,28 +13,26 @@ The After Effects integration requires two components to work; `extension` and ` To install the extension download [Extension Manager Command Line tool (ExManCmd)](https://github.com/Adobe-CEP/Getting-Started-guides/tree/master/Package%20Distribute%20Install#option-2---exmancmd). ``` -ExManCmd /install {path to addon}/api/extension.zxp +ExManCmd /install {path to avalon-core}\avalon\photoshop\extension.zxp ``` OR download [Anastasiy’s Extension Manager](https://install.anastasiy.com/) -`{path to addon}` will be most likely in your AppData (on Windows, in your user data folder in Linux and MacOS.) - ### Server The easiest way to get the server and After Effects launch is with: ``` -python -c ^"import openpype.hosts.photoshop;openpype.hosts..aftereffects.launch(""c:\Program Files\Adobe\Adobe After Effects 2020\Support Files\AfterFX.exe"")^" +python -c ^"import avalon.photoshop;avalon.aftereffects.launch(""c:\Program Files\Adobe\Adobe After Effects 2020\Support Files\AfterFX.exe"")^" ``` `avalon.aftereffects.launch` launches the application and server, and also closes the server when After Effects exists. ## Usage -The After Effects extension can be found under `Window > Extensions > AYON`. Once launched you should be presented with a panel like this: +The After Effects extension can be found under `Window > Extensions > OpenPype`. Once launched you should be presented with a panel like this: -![Ayon Panel](panel.png "Ayon Panel") +![Avalon Panel](panel.PNG "Avalon Panel") ## Developing @@ -45,8 +43,8 @@ When developing the extension you can load it [unsigned](https://github.com/Adob When signing the extension you can use this [guide](https://github.com/Adobe-CEP/Getting-Started-guides/tree/master/Package%20Distribute%20Install#package-distribute-install-guide). ``` -ZXPSignCmd -selfSignedCert NA NA Ayon Avalon-After-Effects Ayon extension.p12 -ZXPSignCmd -sign {path to addon}/api/extension {path to addon}/api/extension.zxp extension.p12 Ayon +ZXPSignCmd -selfSignedCert NA NA Avalon Avalon-After-Effects avalon extension.p12 +ZXPSignCmd -sign {path to avalon-core}\avalon\aftereffects\extension {path to avalon-core}\avalon\aftereffects\extension.zxp extension.p12 avalon ``` ### Plugin Examples @@ -54,14 +52,14 @@ ZXPSignCmd -sign {path to addon}/api/extension {path to addon}/api/extension.zxp These plugins were made with the [polly config](https://github.com/mindbender-studio/config). To fully integrate and load, you will have to use this config and add `image` to the [integration plugin](https://github.com/mindbender-studio/config/blob/master/polly/plugins/publish/integrate_asset.py). Expected deployed extension location on default Windows: -`c:\Program Files (x86)\Common Files\Adobe\CEP\extensions\io.ynput.AE.panel` +`c:\Program Files (x86)\Common Files\Adobe\CEP\extensions\com.openpype.AE.panel` For easier debugging of Javascript: https://community.adobe.com/t5/download-install/adobe-extension-debuger-problem/td-p/10911704?page=1 Add (optional) --enable-blink-features=ShadowDOMV0,CustomElementsV0 when starting Chrome then localhost:8092 -Or use Visual Studio Code https://medium.com/adobetech/extendscript-debugger-for-visual-studio-code-public-release-a2ff6161fa01 +Or use Visual Studio Code https://medium.com/adobetech/extendscript-debugger-for-visual-studio-code-public-release-a2ff6161fa01 ## Resources - https://javascript-tools-guide.readthedocs.io/introduction/index.html - https://github.com/Adobe-CEP/Getting-Started-guides diff --git a/openpype/hosts/aftereffects/api/extension.zxp b/openpype/hosts/aftereffects/api/extension.zxp index 104a5c9e997577959bd8c134fc2ac9febbb8797a..933dc7dc6cab34b6a1630b25d11a2167fa0aef7a 100644 GIT binary patch delta 8354 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 delta 11531 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 I*u? + - + - + - + - + - + - + - + - + - + + \ No newline at end of file diff --git a/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml b/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml index cf6ba67f44..7329a9e723 100644 --- a/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml +++ b/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml @@ -1,8 +1,8 @@ - + - + @@ -38,7 +38,7 @@ - + ./index.html @@ -49,7 +49,7 @@ Panel - AYON + OpenPype 200 @@ -66,7 +66,7 @@ - ./icons/ayon_logo.png + ./icons/iconNormal.png ./icons/iconRollover.png ./icons/iconDisabled.png ./icons/iconDarkNormal.png diff --git a/openpype/hosts/aftereffects/api/extension/icons/ayon_logo.png b/openpype/hosts/aftereffects/api/extension/icons/ayon_logo.png deleted file mode 100644 index 3a96f8e2b499baa337cdc5a4d3cdf547f9ded972..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3538 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 E-zj>|X#fBK diff --git a/openpype/hosts/photoshop/api/panel.png b/openpype/hosts/aftereffects/api/panel.PNG similarity index 100% rename from openpype/hosts/photoshop/api/panel.png rename to openpype/hosts/aftereffects/api/panel.PNG diff --git a/openpype/hosts/aftereffects/api/panel.png b/openpype/hosts/aftereffects/api/panel.png deleted file mode 100644 index d05ed354286dc0dd00b5d7a2df40ba1e3e1fa6cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16269 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

G+>DJ?e&gjtJv$ZP-J* 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 literal 0 HcmV?d00001 diff --git a/openpype/hosts/aftereffects/api/panel_failure.png b/openpype/hosts/aftereffects/api/panel_failure.png deleted file mode 100644 index 6e52a77d22d54708b8bf0d1abac676ce723bd254..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13115 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 Extensions > Ayon`. Once launched you should be presented with a panel like this: +The Photoshop extension can be found under `Window > Extensions > Avalon`. Once launched you should be presented with a panel like this: -![Ayon Panel](panel.png "AYON Panel") +![Avalon Panel](panel.PNG "Avalon Panel") ## Developing @@ -37,7 +37,7 @@ When developing the extension you can load it [unsigned](https://github.com/Adob When signing the extension you can use this [guide](https://github.com/Adobe-CEP/Getting-Started-guides/tree/master/Package%20Distribute%20Install#package-distribute-install-guide). ``` -ZXPSignCmd -selfSignedCert NA NA Ayon Ayon-Photoshop Ayon extension.p12 +ZXPSignCmd -selfSignedCert NA NA Avalon Avalon-Photoshop avalon extension.p12 ZXPSignCmd -sign {path to avalon-core}\avalon\photoshop\extension {path to avalon-core}\avalon\photoshop\extension.zxp extension.p12 avalon ``` diff --git a/openpype/hosts/photoshop/api/extension.zxp b/openpype/hosts/photoshop/api/extension.zxp index 26a73a37fdd2c064a8438f595e8612a7adbcb323..39b766cd0d354e63c5b0e5b874be47131860e3c6 100644 GIT binary patch delta 9331 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 F^*&K&>% diff --git a/openpype/hosts/photoshop/api/extension/.debug b/openpype/hosts/photoshop/api/extension/.debug index 4cea03cb41..a0e2f3c9e0 100644 --- a/openpype/hosts/photoshop/api/extension/.debug +++ b/openpype/hosts/photoshop/api/extension/.debug @@ -1,9 +1,9 @@ - + - + \ No newline at end of file diff --git a/openpype/hosts/photoshop/api/extension/CSXS/manifest.xml b/openpype/hosts/photoshop/api/extension/CSXS/manifest.xml index 16d85be9b4..2089d06da1 100644 --- a/openpype/hosts/photoshop/api/extension/CSXS/manifest.xml +++ b/openpype/hosts/photoshop/api/extension/CSXS/manifest.xml @@ -1,7 +1,7 @@ - + - + @@ -16,7 +16,7 @@ - + ./index.html @@ -32,7 +32,7 @@ Panel -

AYON + OpenPype 300 @@ -44,7 +44,7 @@ - ./icons/ayon_logo.png + ./icons/avalon-logo-48.png
diff --git a/openpype/hosts/photoshop/api/extension/icons/avalon-logo-48.png b/openpype/hosts/photoshop/api/extension/icons/avalon-logo-48.png new file mode 100644 index 0000000000000000000000000000000000000000..33fe2a606bd1ac9d285eb0d6a90b9b14150ca3c4 GIT binary patch literal 1362 zcmV-Y1+DstP)5JpvKiH|A7SK4P~kT{6`M*9LrdQ!Ns9=$qj3(E_W@4gmP#=ht)#^0_psT^(5Px6qr0)mBB%5&-P}{Y*9ph@Pcn`!ete zwiE<#115v#ScdV2GBk!NTFTzWbF>Xip`p8%&KqcqI~Jb6tC``Vaf&07o~axnzSGF( z(ok|5&-4zgtV5rc$qke?7a8cU$D55m^%IcuOgXaxfTb~yegblyEaWJw%`Qe=-M%S@ zhOXSbt2KkcJv{&)s&PL6vC{g1Y-aKYBs(yc@x{whhk_0fK#=N=)Uup zs)>qe=dc=h3&3Gwr10?^8zc#g%1L4Xs{p!rj(uw=)9Szs&#`@sH{=+ zG+fz{pjE0VR%8l+hOX;W8`PbV32glOJ!~I2VXJkTz5Ufkuk(!F8z4>Ok_kkI+Kb}3)n06_ssJy4_*!y{BAe4)9jbBbSR!>UnLxyMT9bL9_?YdfL@K^^G6aZ)C$Qje z(NzKf2bZq2#ed1=gx1ZJQM{TNMk>CBw!wSvUjy@gS4qs1_a85GREVYsFz!+tU$`&M%7iR@HuBiw5bSa5S}|?)>G0PCUMb-Q{Pf zZt0{hEhroOCi1l=h%&q$mkBdG$MzLns~iea1>hEds{qcP5QbL){0`u*@Qfwke+13^ UGpuMiD*ylh07*qoM6N<$g1d2qT>t<8 literal 0 HcmV?d00001 diff --git a/openpype/hosts/photoshop/api/extension/icons/ayon_logo.png b/openpype/hosts/photoshop/api/extension/icons/ayon_logo.png deleted file mode 100644 index 3a96f8e2b499baa337cdc5a4d3cdf547f9ded972..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3538 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 E-zj>|X#fBK diff --git a/openpype/hosts/photoshop/api/panel.PNG b/openpype/hosts/photoshop/api/panel.PNG new file mode 100644 index 0000000000000000000000000000000000000000..be5db3b8df08aa426b92de61eacc9afd00e93d45 GIT binary patch literal 8756 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 literal 0 HcmV?d00001 diff --git a/openpype/hosts/photoshop/api/panel_failure.png b/openpype/hosts/photoshop/api/panel_failure.png deleted file mode 100644 index 6e52a77d22d54708b8bf0d1abac676ce723bd254..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13115 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 Date: Wed, 6 Dec 2023 23:46:21 +0800 Subject: [PATCH 09/12] update the repair function in validate_rendersettings --- .../hosts/maya/plugins/publish/validate_rendersettings.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/validate_rendersettings.py b/openpype/hosts/maya/plugins/publish/validate_rendersettings.py index 3409b4ec91..f2a98eab32 100644 --- a/openpype/hosts/maya/plugins/publish/validate_rendersettings.py +++ b/openpype/hosts/maya/plugins/publish/validate_rendersettings.py @@ -371,7 +371,6 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): continue for node in data["nodes"]: lib.set_attribute(data["attribute"], data["values"][0], node) - with lib.renderlayer(layer_node): # Repair animation must be enabled @@ -392,13 +391,11 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): if renderer != "renderman": prefix_attr = RenderSettings.get_image_prefix_attr(renderer) fname_prefix = default_prefix - cmds.setAttr("{}.{}".format(node, prefix_attr), - fname_prefix, type="string") + cmds.setAttr(prefix_attr, fname_prefix, type="string") # Repair padding padding_attr = RenderSettings.get_padding_attr(renderer) - cmds.setAttr("{}.{}".format(node, padding_attr), - cls.DEFAULT_PADDING) + cmds.setAttr(padding_attr, cls.DEFAULT_PADDING) else: # renderman handles stuff differently cmds.setAttr("rmanGlobals.imageFileFormat", From 129b35e754c7be262d35ed691ba1ce6bd085091e Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Wed, 6 Dec 2023 16:36:14 +0000 Subject: [PATCH 10/12] Testing: dump_databases flag (#5955) * dump_databases flag * Remove wrongly placed code. * Turn flag into format and support json export. * Added new argument to readme --------- Co-authored-by: kalisp --- openpype/cli.py | 7 ++++-- openpype/pype_commands.py | 9 +++++++- tests/conftest.py | 10 +++++++++ tests/integration/README.md | 2 +- tests/lib/db_handler.py | 42 ++++++++++++++++++++++++++---------- tests/lib/testing_classes.py | 30 ++++++++++++++++++-------- 6 files changed, 76 insertions(+), 24 deletions(-) diff --git a/openpype/cli.py b/openpype/cli.py index f0fe550a1f..8caa139765 100644 --- a/openpype/cli.py +++ b/openpype/cli.py @@ -296,12 +296,15 @@ def run(script): @click.option("--mongo_url", help="MongoDB for testing.", default=None) +@click.option("--dump_databases", + help="Dump all databases to data folder.", + default=None) def runtests(folder, mark, pyargs, test_data_folder, persist, app_variant, - timeout, setup_only, mongo_url, app_group): + timeout, setup_only, mongo_url, app_group, dump_databases): """Run all automatic tests after proper initialization via start.py""" PypeCommands().run_tests(folder, mark, pyargs, test_data_folder, persist, app_variant, timeout, setup_only, - mongo_url, app_group) + mongo_url, app_group, dump_databases) @main.command(help="DEPRECATED - run sync server") diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py index 960e9d410d..f744337c67 100644 --- a/openpype/pype_commands.py +++ b/openpype/pype_commands.py @@ -214,7 +214,7 @@ class PypeCommands: def run_tests(self, folder, mark, pyargs, test_data_folder, persist, app_variant, timeout, setup_only, - mongo_url, app_group): + mongo_url, app_group, dump_databases): """ Runs tests from 'folder' @@ -275,6 +275,13 @@ class PypeCommands: if mongo_url: args.extend(["--mongo_url", mongo_url]) + if dump_databases: + msg = "dump_databases format is not recognized: {}".format( + dump_databases + ) + assert dump_databases in ["bson", "json"], msg + args.extend(["--dump_databases", dump_databases]) + print("run_tests args: {}".format(args)) import pytest pytest.main(args) diff --git a/tests/conftest.py b/tests/conftest.py index 028c19bc5f..cb4806998a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -39,6 +39,11 @@ def pytest_addoption(parser): help="Provide url of the Mongo database." ) + parser.addoption( + "--dump_databases", action="store", default=None, + help="Dump databases to data folder." + ) + @pytest.fixture(scope="module") def test_data_folder(request): @@ -75,6 +80,11 @@ def mongo_url(request): return request.config.getoption("--mongo_url") +@pytest.fixture(scope="module") +def dump_databases(request): + return request.config.getoption("--dump_databases") + + @pytest.hookimpl(tryfirst=True, hookwrapper=True) def pytest_runtest_makereport(item, call): # execute all other hooks to obtain the report object diff --git a/tests/integration/README.md b/tests/integration/README.md index 7b9b7cd706..1e45b55ed5 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -29,7 +29,7 @@ Command line arguments - "--timeout" - "Provide specific timeout value for test case", - "--setup_only" - "Only create dbs, do not run tests", - "--mongo_url" - "MongoDB for testing.", - + - "--dump_databases" - ("json"|"bson") export database in expected format after successful test (to output folder in temp location - which is made persistent by this, must be cleared manually) Run Tray for test ----------------- In case of failed test you might want to run it manually and visually debug what happened. diff --git a/tests/lib/db_handler.py b/tests/lib/db_handler.py index 82e741cc3b..d9a52be5b4 100644 --- a/tests/lib/db_handler.py +++ b/tests/lib/db_handler.py @@ -2,7 +2,7 @@ Helper class for automatic testing, provides dump and restore via command line utilities. - Expect mongodump, mongoimport and mongorestore present at PATH + Expect mongodump, mongoexport, mongoimport and mongorestore present at PATH """ import os import pymongo @@ -148,7 +148,7 @@ class DBHandler: self.client.drop_database(db_name) def backup_to_dump(self, db_name, dump_dir, overwrite=False, - collection=None): + collection=None, format="bson"): """ Helper method for running mongodump for specific 'db_name' """ @@ -160,15 +160,24 @@ class DBHandler: raise RuntimeError("Backup already exists, " "run with overwrite=True") - query = self._dump_query(self.uri, dump_dir, - db_name=db_name, collection=collection) - print("Mongodump query:: {}".format(query)) - subprocess.run(query) + collections = [collection] + if format == "json" and collection is None: + collections = self.client[db_name].list_collection_names() + + for collection in collections: + query = self._dump_query(self.uri, dump_dir, + db_name=db_name, collection=collection, + format=format) + print("Mongodump query:: {}".format(query)) + process = subprocess.run(query) + assert process.returncode == 0, "Mongo dump failed." def _db_exists(self, db_name): return db_name in self.client.list_database_names() - def _dump_query(self, uri, output_path, db_name=None, collection=None): + def _dump_query( + self, uri, output_path, db_name=None, collection=None, format="bson" + ): """Prepares dump query based on 'db_name' or 'collection'.""" db_part = coll_part = "" if db_name: @@ -177,11 +186,22 @@ class DBHandler: if not db_name: raise ValueError("db_name must be present") coll_part = "--collection={}".format(collection) - query = "\"{}\" --uri=\"{}\" --out={} {} {}".format( - "mongodump", uri, output_path, db_part, coll_part - ) - return query + tool = "mongodump" + query = "{} --uri=\"{}\"" + + if format == "json": + assert collection, "Collection is needed for json export." + + query += " --jsonArray --pretty" + tool = "mongoexport" + output_path = os.path.join( + output_path, "{}.{}.json".format(db_name, collection) + ) + + query += " --out={} {} {}" + + return query.format(tool, uri, output_path, db_part, coll_part) def _restore_query(self, uri, dump_dir, db_name=None, db_name_out=None, diff --git a/tests/lib/testing_classes.py b/tests/lib/testing_classes.py index 7700381aa6..7a90f76662 100644 --- a/tests/lib/testing_classes.py +++ b/tests/lib/testing_classes.py @@ -70,7 +70,9 @@ class ModuleUnitTest(BaseTest): ) @pytest.fixture(scope="module") - def download_test_data(self, test_data_folder, persist, request): + def download_test_data( + self, test_data_folder, persist, request, dump_databases + ): test_data_folder = test_data_folder or self.TEST_DATA_FOLDER if test_data_folder: print("Using existing folder {}".format(test_data_folder)) @@ -100,13 +102,13 @@ class ModuleUnitTest(BaseTest): if ext and ext.lstrip('.') in handler_class.IMPLEMENTED_ZIP_FORMATS: # noqa: E501 handler_class.unzip(os.path.join(tmpdir, file_name)) - yield tmpdir + yield tmpdir - persist = (persist or self.PERSIST or - self.is_test_failed(request)) - if not persist: - print("Removing {}".format(tmpdir)) - shutil.rmtree(tmpdir) + persist = (persist or self.PERSIST or + self.is_test_failed(request) or dump_databases) + if not persist: + print("Removing {}".format(tmpdir)) + shutil.rmtree(tmpdir) @pytest.fixture(scope="module") def output_folder_url(self, download_test_data): @@ -163,7 +165,7 @@ class ModuleUnitTest(BaseTest): @pytest.fixture(scope="module") def db_setup(self, download_test_data, env_var, monkeypatch_session, - request, mongo_url): + request, mongo_url, dump_databases, persist): """Restore prepared MongoDB dumps into selected DB.""" backup_dir = os.path.join(download_test_data, "input", "dumps") uri = os.environ.get("OPENPYPE_MONGO") @@ -178,7 +180,17 @@ class ModuleUnitTest(BaseTest): yield db_handler - persist = self.PERSIST or self.is_test_failed(request) + if dump_databases: + print("Dumping databases to {}".format(download_test_data)) + output_dir = os.path.join(download_test_data, "output", "dumps") + db_handler.backup_to_dump( + self.TEST_DB_NAME, output_dir, format=dump_databases + ) + db_handler.backup_to_dump( + self.TEST_OPENPYPE_NAME, output_dir, format=dump_databases + ) + + persist = persist or self.PERSIST or self.is_test_failed(request) if not persist: db_handler.teardown(self.TEST_DB_NAME) db_handler.teardown(self.TEST_OPENPYPE_NAME) From f2fd1750b3bcfcdb332f5a9faf3f6b204fd69372 Mon Sep 17 00:00:00 2001 From: Mustafa Taher Date: Wed, 6 Dec 2023 18:43:57 +0200 Subject: [PATCH 11/12] Chore/houdini update startup log (#6003) * replace OpenPype with AYON * replace OpenPype with AYON * kuba's comments * Resolve Hound * remove redundant space --- openpype/hosts/houdini/startup/python2.7libs/pythonrc.py | 4 +++- openpype/hosts/houdini/startup/python3.10libs/pythonrc.py | 4 +++- openpype/hosts/houdini/startup/python3.7libs/pythonrc.py | 4 +++- openpype/hosts/houdini/startup/python3.9libs/pythonrc.py | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/openpype/hosts/houdini/startup/python2.7libs/pythonrc.py b/openpype/hosts/houdini/startup/python2.7libs/pythonrc.py index 683ea6721c..0b92fc2706 100644 --- a/openpype/hosts/houdini/startup/python2.7libs/pythonrc.py +++ b/openpype/hosts/houdini/startup/python2.7libs/pythonrc.py @@ -2,10 +2,12 @@ """OpenPype startup script.""" from openpype.pipeline import install_host from openpype.hosts.houdini.api import HoudiniHost +from openpype import AYON_SERVER_ENABLED def main(): - print("Installing OpenPype ...") + print("Installing {} ...".format( + "AYON" if AYON_SERVER_ENABLED else "OpenPype")) install_host(HoudiniHost()) diff --git a/openpype/hosts/houdini/startup/python3.10libs/pythonrc.py b/openpype/hosts/houdini/startup/python3.10libs/pythonrc.py index 683ea6721c..0b92fc2706 100644 --- a/openpype/hosts/houdini/startup/python3.10libs/pythonrc.py +++ b/openpype/hosts/houdini/startup/python3.10libs/pythonrc.py @@ -2,10 +2,12 @@ """OpenPype startup script.""" from openpype.pipeline import install_host from openpype.hosts.houdini.api import HoudiniHost +from openpype import AYON_SERVER_ENABLED def main(): - print("Installing OpenPype ...") + print("Installing {} ...".format( + "AYON" if AYON_SERVER_ENABLED else "OpenPype")) install_host(HoudiniHost()) diff --git a/openpype/hosts/houdini/startup/python3.7libs/pythonrc.py b/openpype/hosts/houdini/startup/python3.7libs/pythonrc.py index 683ea6721c..0b92fc2706 100644 --- a/openpype/hosts/houdini/startup/python3.7libs/pythonrc.py +++ b/openpype/hosts/houdini/startup/python3.7libs/pythonrc.py @@ -2,10 +2,12 @@ """OpenPype startup script.""" from openpype.pipeline import install_host from openpype.hosts.houdini.api import HoudiniHost +from openpype import AYON_SERVER_ENABLED def main(): - print("Installing OpenPype ...") + print("Installing {} ...".format( + "AYON" if AYON_SERVER_ENABLED else "OpenPype")) install_host(HoudiniHost()) diff --git a/openpype/hosts/houdini/startup/python3.9libs/pythonrc.py b/openpype/hosts/houdini/startup/python3.9libs/pythonrc.py index 683ea6721c..0b92fc2706 100644 --- a/openpype/hosts/houdini/startup/python3.9libs/pythonrc.py +++ b/openpype/hosts/houdini/startup/python3.9libs/pythonrc.py @@ -2,10 +2,12 @@ """OpenPype startup script.""" from openpype.pipeline import install_host from openpype.hosts.houdini.api import HoudiniHost +from openpype import AYON_SERVER_ENABLED def main(): - print("Installing OpenPype ...") + print("Installing {} ...".format( + "AYON" if AYON_SERVER_ENABLED else "OpenPype")) install_host(HoudiniHost()) From f6b43481b3a0da827037fb96e9a3c07bf89e941f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 6 Dec 2023 17:58:44 +0100 Subject: [PATCH 12/12] do not expect workfileInstances constains only new type instance data (#6015) --- .../hosts/tvpaint/plugins/publish/collect_render_instances.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/tvpaint/plugins/publish/collect_render_instances.py b/openpype/hosts/tvpaint/plugins/publish/collect_render_instances.py index e89fbf7882..577e6e30e2 100644 --- a/openpype/hosts/tvpaint/plugins/publish/collect_render_instances.py +++ b/openpype/hosts/tvpaint/plugins/publish/collect_render_instances.py @@ -73,7 +73,7 @@ class CollectRenderInstances(pyblish.api.InstancePlugin): render_layer_id = creator_attributes["render_layer_instance_id"] for in_data in instance.context.data["workfileInstances"]: if ( - in_data["creator_identifier"] == "render.layer" + in_data.get("creator_identifier") == "render.layer" and in_data["instance_id"] == render_layer_id ): render_layer_data = in_data