From ed638a47fe2e8549e9fa4296468db36d04f5f0cf Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 31 May 2024 16:41:57 +0200 Subject: [PATCH 1/8] moved aftereffects next to server codebase --- .../client/ayon_aftereffects}/__init__.py | 0 .../aftereffects/client/ayon_aftereffects}/addon.py | 0 .../client/ayon_aftereffects}/api/README.md | 0 .../client/ayon_aftereffects}/api/__init__.py | 0 .../client/ayon_aftereffects}/api/extension.zxp | Bin .../client/ayon_aftereffects}/api/extension/.debug | 0 .../api/extension/CSXS/manifest.xml | 0 .../api/extension/css/boilerplate.css | 0 .../ayon_aftereffects}/api/extension/css/styles.css | 0 .../api/extension/css/topcoat-desktop-dark.min.css | 0 .../api/extension/icons/ayon_logo.png | Bin .../api/extension/icons/iconDarkNormal.png | Bin .../api/extension/icons/iconDarkRollover.png | Bin .../api/extension/icons/iconDisabled.png | Bin .../api/extension/icons/iconNormal.png | Bin .../api/extension/icons/iconRollover.png | Bin .../ayon_aftereffects}/api/extension/index.html | 0 .../api/extension/js/libs/CSInterface.js | 0 .../api/extension/js/libs/jquery-2.0.2.min.js | 0 .../api/extension/js/libs/json.js | 0 .../api/extension/js/libs/loglevel.min.js | 0 .../api/extension/js/libs/wsrpc.js | 0 .../api/extension/js/libs/wsrpc.min.js | 0 .../ayon_aftereffects}/api/extension/js/main.js | 0 .../api/extension/js/themeManager.js | 0 .../api/extension/jsx/hostscript.jsx | 0 .../client/ayon_aftereffects}/api/launch_logic.py | 0 .../client/ayon_aftereffects}/api/launch_script.py | 0 .../client/ayon_aftereffects}/api/lib.py | 0 .../client/ayon_aftereffects}/api/panel.png | Bin .../client/ayon_aftereffects}/api/panel_failure.png | Bin .../client/ayon_aftereffects}/api/pipeline.py | 0 .../client/ayon_aftereffects}/api/plugin.py | 0 .../api/workfile_template_builder.py | 0 .../client/ayon_aftereffects}/api/ws_stub.py | 0 .../ayon_aftereffects}/hooks/pre_launch_args.py | 0 .../client/ayon_aftereffects}/plugins/__init__.py | 0 .../plugins/create/create_render.py | 0 .../plugins/create/workfile_creator.py | 0 .../plugins/load/load_background.py | 0 .../ayon_aftereffects}/plugins/load/load_file.py | 0 .../plugins/publish/add_publish_highlight.py | 0 .../ayon_aftereffects}/plugins/publish/closeAE.py | 0 .../plugins/publish/collect_audio.py | 0 .../plugins/publish/collect_current_file.py | 0 .../plugins/publish/collect_extension_version.py | 0 .../plugins/publish/collect_render.py | 0 .../plugins/publish/collect_review.py | 0 .../plugins/publish/collect_workfile.py | 0 .../plugins/publish/extract_local_render.py | 0 .../plugins/publish/extract_save_scene.py | 0 .../plugins/publish/help/validate_footage_items.xml | 0 .../publish/help/validate_instance_asset.xml | 0 .../publish/help/validate_scene_settings.xml | 0 .../plugins/publish/increment_workfile.py | 0 .../plugins/publish/remove_publish_highlight.py | 0 .../plugins/publish/validate_footage_items.py | 0 .../plugins/publish/validate_instance_asset.py | 0 .../plugins/publish/validate_scene_settings.py | 0 .../plugins/workfile_build/create_placeholder.py | 0 .../plugins/workfile_build/load_placeholder.py | 0 .../ayon_aftereffects}/resources/template.aep | Bin 62 files changed, 0 insertions(+), 0 deletions(-) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/__init__.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/addon.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/README.md (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/__init__.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension.zxp (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/.debug (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/CSXS/manifest.xml (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/css/boilerplate.css (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/css/styles.css (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/css/topcoat-desktop-dark.min.css (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/icons/ayon_logo.png (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/icons/iconDarkNormal.png (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/icons/iconDarkRollover.png (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/icons/iconDisabled.png (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/icons/iconNormal.png (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/icons/iconRollover.png (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/index.html (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/js/libs/CSInterface.js (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/js/libs/jquery-2.0.2.min.js (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/js/libs/json.js (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/js/libs/loglevel.min.js (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/js/libs/wsrpc.js (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/js/libs/wsrpc.min.js (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/js/main.js (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/js/themeManager.js (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/extension/jsx/hostscript.jsx (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/launch_logic.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/launch_script.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/lib.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/panel.png (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/panel_failure.png (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/pipeline.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/plugin.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/workfile_template_builder.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/api/ws_stub.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/hooks/pre_launch_args.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/__init__.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/create/create_render.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/create/workfile_creator.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/load/load_background.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/load/load_file.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/add_publish_highlight.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/closeAE.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/collect_audio.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/collect_current_file.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/collect_extension_version.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/collect_render.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/collect_review.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/collect_workfile.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/extract_local_render.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/extract_save_scene.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/help/validate_footage_items.xml (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/help/validate_instance_asset.xml (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/help/validate_scene_settings.xml (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/increment_workfile.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/remove_publish_highlight.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/validate_footage_items.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/validate_instance_asset.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/publish/validate_scene_settings.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/workfile_build/create_placeholder.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/plugins/workfile_build/load_placeholder.py (100%) rename {client/ayon_core/hosts/aftereffects => server_addon/aftereffects/client/ayon_aftereffects}/resources/template.aep (100%) diff --git a/client/ayon_core/hosts/aftereffects/__init__.py b/server_addon/aftereffects/client/ayon_aftereffects/__init__.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/__init__.py rename to server_addon/aftereffects/client/ayon_aftereffects/__init__.py diff --git a/client/ayon_core/hosts/aftereffects/addon.py b/server_addon/aftereffects/client/ayon_aftereffects/addon.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/addon.py rename to server_addon/aftereffects/client/ayon_aftereffects/addon.py diff --git a/client/ayon_core/hosts/aftereffects/api/README.md b/server_addon/aftereffects/client/ayon_aftereffects/api/README.md similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/README.md rename to server_addon/aftereffects/client/ayon_aftereffects/api/README.md diff --git a/client/ayon_core/hosts/aftereffects/api/__init__.py b/server_addon/aftereffects/client/ayon_aftereffects/api/__init__.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/__init__.py rename to server_addon/aftereffects/client/ayon_aftereffects/api/__init__.py diff --git a/client/ayon_core/hosts/aftereffects/api/extension.zxp b/server_addon/aftereffects/client/ayon_aftereffects/api/extension.zxp similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension.zxp rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension.zxp diff --git a/client/ayon_core/hosts/aftereffects/api/extension/.debug b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/.debug similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/.debug rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/.debug diff --git a/client/ayon_core/hosts/aftereffects/api/extension/CSXS/manifest.xml b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/CSXS/manifest.xml similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/CSXS/manifest.xml rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/CSXS/manifest.xml diff --git a/client/ayon_core/hosts/aftereffects/api/extension/css/boilerplate.css b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/css/boilerplate.css similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/css/boilerplate.css rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/css/boilerplate.css diff --git a/client/ayon_core/hosts/aftereffects/api/extension/css/styles.css b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/css/styles.css similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/css/styles.css rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/css/styles.css diff --git a/client/ayon_core/hosts/aftereffects/api/extension/css/topcoat-desktop-dark.min.css b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/css/topcoat-desktop-dark.min.css similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/css/topcoat-desktop-dark.min.css rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/css/topcoat-desktop-dark.min.css diff --git a/client/ayon_core/hosts/aftereffects/api/extension/icons/ayon_logo.png b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/ayon_logo.png similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/icons/ayon_logo.png rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/ayon_logo.png diff --git a/client/ayon_core/hosts/aftereffects/api/extension/icons/iconDarkNormal.png b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconDarkNormal.png similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/icons/iconDarkNormal.png rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconDarkNormal.png diff --git a/client/ayon_core/hosts/aftereffects/api/extension/icons/iconDarkRollover.png b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconDarkRollover.png similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/icons/iconDarkRollover.png rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconDarkRollover.png diff --git a/client/ayon_core/hosts/aftereffects/api/extension/icons/iconDisabled.png b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconDisabled.png similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/icons/iconDisabled.png rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconDisabled.png diff --git a/client/ayon_core/hosts/aftereffects/api/extension/icons/iconNormal.png b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconNormal.png similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/icons/iconNormal.png rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconNormal.png diff --git a/client/ayon_core/hosts/aftereffects/api/extension/icons/iconRollover.png b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconRollover.png similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/icons/iconRollover.png rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/icons/iconRollover.png diff --git a/client/ayon_core/hosts/aftereffects/api/extension/index.html b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/index.html similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/index.html rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/index.html diff --git a/client/ayon_core/hosts/aftereffects/api/extension/js/libs/CSInterface.js b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/CSInterface.js similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/js/libs/CSInterface.js rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/CSInterface.js diff --git a/client/ayon_core/hosts/aftereffects/api/extension/js/libs/jquery-2.0.2.min.js b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/jquery-2.0.2.min.js similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/js/libs/jquery-2.0.2.min.js rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/jquery-2.0.2.min.js diff --git a/client/ayon_core/hosts/aftereffects/api/extension/js/libs/json.js b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/json.js similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/js/libs/json.js rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/json.js diff --git a/client/ayon_core/hosts/aftereffects/api/extension/js/libs/loglevel.min.js b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/loglevel.min.js similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/js/libs/loglevel.min.js rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/loglevel.min.js diff --git a/client/ayon_core/hosts/aftereffects/api/extension/js/libs/wsrpc.js b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/wsrpc.js similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/js/libs/wsrpc.js rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/wsrpc.js diff --git a/client/ayon_core/hosts/aftereffects/api/extension/js/libs/wsrpc.min.js b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/wsrpc.min.js similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/js/libs/wsrpc.min.js rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/wsrpc.min.js diff --git a/client/ayon_core/hosts/aftereffects/api/extension/js/main.js b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/main.js similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/js/main.js rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/main.js diff --git a/client/ayon_core/hosts/aftereffects/api/extension/js/themeManager.js b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/themeManager.js similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/js/themeManager.js rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/themeManager.js diff --git a/client/ayon_core/hosts/aftereffects/api/extension/jsx/hostscript.jsx b/server_addon/aftereffects/client/ayon_aftereffects/api/extension/jsx/hostscript.jsx similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/extension/jsx/hostscript.jsx rename to server_addon/aftereffects/client/ayon_aftereffects/api/extension/jsx/hostscript.jsx diff --git a/client/ayon_core/hosts/aftereffects/api/launch_logic.py b/server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/launch_logic.py rename to server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py diff --git a/client/ayon_core/hosts/aftereffects/api/launch_script.py b/server_addon/aftereffects/client/ayon_aftereffects/api/launch_script.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/launch_script.py rename to server_addon/aftereffects/client/ayon_aftereffects/api/launch_script.py diff --git a/client/ayon_core/hosts/aftereffects/api/lib.py b/server_addon/aftereffects/client/ayon_aftereffects/api/lib.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/lib.py rename to server_addon/aftereffects/client/ayon_aftereffects/api/lib.py diff --git a/client/ayon_core/hosts/aftereffects/api/panel.png b/server_addon/aftereffects/client/ayon_aftereffects/api/panel.png similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/panel.png rename to server_addon/aftereffects/client/ayon_aftereffects/api/panel.png diff --git a/client/ayon_core/hosts/aftereffects/api/panel_failure.png b/server_addon/aftereffects/client/ayon_aftereffects/api/panel_failure.png similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/panel_failure.png rename to server_addon/aftereffects/client/ayon_aftereffects/api/panel_failure.png diff --git a/client/ayon_core/hosts/aftereffects/api/pipeline.py b/server_addon/aftereffects/client/ayon_aftereffects/api/pipeline.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/pipeline.py rename to server_addon/aftereffects/client/ayon_aftereffects/api/pipeline.py diff --git a/client/ayon_core/hosts/aftereffects/api/plugin.py b/server_addon/aftereffects/client/ayon_aftereffects/api/plugin.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/plugin.py rename to server_addon/aftereffects/client/ayon_aftereffects/api/plugin.py diff --git a/client/ayon_core/hosts/aftereffects/api/workfile_template_builder.py b/server_addon/aftereffects/client/ayon_aftereffects/api/workfile_template_builder.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/workfile_template_builder.py rename to server_addon/aftereffects/client/ayon_aftereffects/api/workfile_template_builder.py diff --git a/client/ayon_core/hosts/aftereffects/api/ws_stub.py b/server_addon/aftereffects/client/ayon_aftereffects/api/ws_stub.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/api/ws_stub.py rename to server_addon/aftereffects/client/ayon_aftereffects/api/ws_stub.py diff --git a/client/ayon_core/hosts/aftereffects/hooks/pre_launch_args.py b/server_addon/aftereffects/client/ayon_aftereffects/hooks/pre_launch_args.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/hooks/pre_launch_args.py rename to server_addon/aftereffects/client/ayon_aftereffects/hooks/pre_launch_args.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/__init__.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/__init__.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/__init__.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/__init__.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/create/create_render.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/create_render.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/create/create_render.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/create/create_render.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/create/workfile_creator.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/workfile_creator.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/create/workfile_creator.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/create/workfile_creator.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/load/load_background.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_background.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/load/load_background.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_background.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/load/load_file.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_file.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/load/load_file.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_file.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/add_publish_highlight.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/add_publish_highlight.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/add_publish_highlight.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/add_publish_highlight.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/closeAE.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/closeAE.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/closeAE.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/closeAE.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/collect_audio.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_audio.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/collect_audio.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_audio.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/collect_current_file.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_current_file.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/collect_current_file.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_current_file.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/collect_extension_version.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_extension_version.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/collect_extension_version.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_extension_version.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/collect_render.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_render.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/collect_render.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_render.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/collect_review.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_review.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/collect_review.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_review.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/collect_workfile.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_workfile.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/collect_workfile.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_workfile.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/extract_local_render.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_local_render.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/extract_local_render.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_local_render.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/extract_save_scene.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_save_scene.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/extract_save_scene.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_save_scene.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/help/validate_footage_items.xml b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/help/validate_footage_items.xml similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/help/validate_footage_items.xml rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/help/validate_footage_items.xml diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/help/validate_instance_asset.xml b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/help/validate_instance_asset.xml similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/help/validate_instance_asset.xml rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/help/validate_instance_asset.xml diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/help/validate_scene_settings.xml b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/help/validate_scene_settings.xml similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/help/validate_scene_settings.xml rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/help/validate_scene_settings.xml diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/increment_workfile.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/increment_workfile.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/increment_workfile.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/increment_workfile.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/remove_publish_highlight.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/remove_publish_highlight.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/remove_publish_highlight.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/remove_publish_highlight.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/validate_footage_items.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_footage_items.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/validate_footage_items.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_footage_items.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/validate_instance_asset.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_instance_asset.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/validate_instance_asset.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_instance_asset.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/publish/validate_scene_settings.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/publish/validate_scene_settings.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/workfile_build/create_placeholder.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/create_placeholder.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/workfile_build/create_placeholder.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/create_placeholder.py diff --git a/client/ayon_core/hosts/aftereffects/plugins/workfile_build/load_placeholder.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/load_placeholder.py similarity index 100% rename from client/ayon_core/hosts/aftereffects/plugins/workfile_build/load_placeholder.py rename to server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/load_placeholder.py diff --git a/client/ayon_core/hosts/aftereffects/resources/template.aep b/server_addon/aftereffects/client/ayon_aftereffects/resources/template.aep similarity index 100% rename from client/ayon_core/hosts/aftereffects/resources/template.aep rename to server_addon/aftereffects/client/ayon_aftereffects/resources/template.aep From 4b0540aee89b678ef07375e7228e0ec4070558ab Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 31 May 2024 16:49:07 +0200 Subject: [PATCH 2/8] fix imports --- .../aftereffects/client/ayon_aftereffects/api/README.md | 2 +- .../client/ayon_aftereffects/api/launch_logic.py | 8 ++++---- .../client/ayon_aftereffects/api/launch_script.py | 2 +- .../aftereffects/client/ayon_aftereffects/api/pipeline.py | 8 ++------ .../ayon_aftereffects/api/workfile_template_builder.py | 2 +- .../client/ayon_aftereffects/hooks/pre_launch_args.py | 2 +- .../ayon_aftereffects/plugins/create/create_render.py | 6 +++--- .../ayon_aftereffects/plugins/create/workfile_creator.py | 4 ++-- .../ayon_aftereffects/plugins/load/load_background.py | 4 ++-- .../client/ayon_aftereffects/plugins/load/load_file.py | 4 ++-- .../plugins/publish/add_publish_highlight.py | 2 +- .../client/ayon_aftereffects/plugins/publish/closeAE.py | 2 +- .../ayon_aftereffects/plugins/publish/collect_audio.py | 2 +- .../plugins/publish/collect_current_file.py | 2 +- .../plugins/publish/collect_extension_version.py | 2 +- .../ayon_aftereffects/plugins/publish/collect_render.py | 2 +- .../plugins/publish/extract_local_render.py | 2 +- .../plugins/publish/extract_save_scene.py | 2 +- .../plugins/publish/increment_workfile.py | 2 +- .../plugins/publish/remove_publish_highlight.py | 2 +- .../plugins/publish/validate_footage_items.py | 2 +- .../plugins/publish/validate_instance_asset.py | 2 +- .../plugins/publish/validate_scene_settings.py | 2 +- .../plugins/workfile_build/create_placeholder.py | 8 +++++--- .../plugins/workfile_build/load_placeholder.py | 6 ++++-- 25 files changed, 41 insertions(+), 41 deletions(-) diff --git a/server_addon/aftereffects/client/ayon_aftereffects/api/README.md b/server_addon/aftereffects/client/ayon_aftereffects/api/README.md index 53eb896255..ca7d5b9b13 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/api/README.md +++ b/server_addon/aftereffects/client/ayon_aftereffects/api/README.md @@ -25,7 +25,7 @@ download [Anastasiy’s Extension Manager](https://install.anastasiy.com/) The easiest way to get the server and After Effects launch is with: ``` -python -c ^"import ayon_core.hosts.photoshop;ayon_core.hosts.aftereffects.launch(""c:\Program Files\Adobe\Adobe After Effects 2020\Support Files\AfterFX.exe"")^" +python -c ^"import ayon_core.hosts.photoshop;ayon_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. diff --git a/server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py b/server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py index da6887668a..fb8702e20b 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py @@ -35,7 +35,7 @@ def main(*subprocess_args): """Main entrypoint to AE launching, called from pre hook.""" sys.excepthook = safe_excepthook - from ayon_core.hosts.aftereffects.api import AfterEffectsHost + from ayon_aftereffects.api import AfterEffectsHost host = AfterEffectsHost() install_host(host) @@ -355,7 +355,7 @@ class AfterEffectsRoute(WebSocketRoute): return "nothing" def create_placeholder_route(self): - from ayon_core.hosts.aftereffects.api.workfile_template_builder import \ + from ayon_aftereffects.api.workfile_template_builder import \ create_placeholder partial_method = functools.partial(create_placeholder) @@ -365,7 +365,7 @@ class AfterEffectsRoute(WebSocketRoute): return "nothing" def update_placeholder_route(self): - from ayon_core.hosts.aftereffects.api.workfile_template_builder import \ + from ayon_aftereffects.api.workfile_template_builder import \ update_placeholder partial_method = functools.partial(update_placeholder) @@ -375,7 +375,7 @@ class AfterEffectsRoute(WebSocketRoute): return "nothing" def build_workfile_template_route(self): - from ayon_core.hosts.aftereffects.api.workfile_template_builder import \ + from ayon_aftereffects.api.workfile_template_builder import \ build_workfile_template partial_method = functools.partial(build_workfile_template) diff --git a/server_addon/aftereffects/client/ayon_aftereffects/api/launch_script.py b/server_addon/aftereffects/client/ayon_aftereffects/api/launch_script.py index 87926c022b..6b7f12ca43 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/api/launch_script.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/api/launch_script.py @@ -8,7 +8,7 @@ workfile or others. import os import sys -from ayon_core.hosts.aftereffects.api.launch_logic import main as host_main +from ayon_aftereffects.api.launch_logic import main as host_main # Get current file to locate start point of sys.argv CURRENT_FILE = os.path.abspath(__file__) diff --git a/server_addon/aftereffects/client/ayon_aftereffects/api/pipeline.py b/server_addon/aftereffects/client/ayon_aftereffects/api/pipeline.py index 2239040f09..4bc51a324b 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/api/pipeline.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/api/pipeline.py @@ -14,8 +14,6 @@ from ayon_core.pipeline import ( AYON_INSTANCE_ID, ) from ayon_core.pipeline.load import any_outdated_containers -import ayon_core.hosts.aftereffects - from ayon_core.host import ( HostBase, IWorkfileHost, @@ -23,6 +21,7 @@ from ayon_core.host import ( IPublishHost ) from ayon_core.tools.utils import get_ayon_qt_app +from ayon_aftereffects import AFTEREFFECTS_ADDON_ROOT from .launch_logic import get_stub from .ws_stub import ConnectionNotEstablishedYet @@ -30,10 +29,7 @@ from .ws_stub import ConnectionNotEstablishedYet log = Logger.get_logger(__name__) -HOST_DIR = os.path.dirname( - os.path.abspath(ayon_core.hosts.aftereffects.__file__) -) -PLUGINS_DIR = os.path.join(HOST_DIR, "plugins") +PLUGINS_DIR = os.path.join(AFTEREFFECTS_ADDON_ROOT, "plugins") PUBLISH_PATH = os.path.join(PLUGINS_DIR, "publish") LOAD_PATH = os.path.join(PLUGINS_DIR, "load") CREATE_PATH = os.path.join(PLUGINS_DIR, "create") diff --git a/server_addon/aftereffects/client/ayon_aftereffects/api/workfile_template_builder.py b/server_addon/aftereffects/client/ayon_aftereffects/api/workfile_template_builder.py index 99d5bbb938..77fd1059b5 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/api/workfile_template_builder.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/api/workfile_template_builder.py @@ -12,7 +12,7 @@ from ayon_core.pipeline.workfile.workfile_template_builder import ( PlaceholderPlugin, PlaceholderItem ) -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub PLACEHOLDER_SET = "PLACEHOLDERS_SET" PLACEHOLDER_ID = "openpype.placeholder" diff --git a/server_addon/aftereffects/client/ayon_aftereffects/hooks/pre_launch_args.py b/server_addon/aftereffects/client/ayon_aftereffects/hooks/pre_launch_args.py index a37481566e..6a8b434953 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/hooks/pre_launch_args.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/hooks/pre_launch_args.py @@ -7,7 +7,7 @@ from ayon_core.lib import ( is_using_ayon_console, ) from ayon_applications import PreLaunchHook, LaunchTypes -from ayon_core.hosts.aftereffects import get_launch_script_path +from ayon_aftereffects import get_launch_script_path def get_launch_kwargs(kwargs): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/create_render.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/create_render.py index 29df34876a..eafe845247 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/create_render.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/create_render.py @@ -2,16 +2,16 @@ import re from ayon_core import resources from ayon_core.lib import BoolDef, UISeparatorDef -from ayon_core.hosts.aftereffects import api from ayon_core.pipeline import ( Creator, CreatedInstance, CreatorError ) -from ayon_core.hosts.aftereffects.api.pipeline import cache_and_get_instances -from ayon_core.hosts.aftereffects.api.lib import set_settings from ayon_core.lib import prepare_template_data from ayon_core.pipeline.create import PRODUCT_NAME_ALLOWED_SYMBOLS +from ayon_aftereffects import api +from ayon_aftereffects.api.pipeline import cache_and_get_instances +from ayon_aftereffects.api.lib import set_settings class RenderCreator(Creator): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/workfile_creator.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/workfile_creator.py index b46e82bf1a..fcf25a3944 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/workfile_creator.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/create/workfile_creator.py @@ -1,11 +1,11 @@ import ayon_api -import ayon_core.hosts.aftereffects.api as api from ayon_core.pipeline import ( AutoCreator, CreatedInstance ) -from ayon_core.hosts.aftereffects.api.pipeline import cache_and_get_instances +from ayon_aftereffects import api +from ayon_aftereffects.api.pipeline import cache_and_get_instances class AEWorkfileCreator(AutoCreator): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_background.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_background.py index 5685011d5f..62a4e24482 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_background.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_background.py @@ -1,9 +1,9 @@ import re from ayon_core.pipeline import get_representation_path -from ayon_core.hosts.aftereffects import api -from ayon_core.hosts.aftereffects.api.lib import ( +from ayon_aftereffects import api +from ayon_aftereffects.api.lib import ( get_background_layers, get_unique_layer_name, ) diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_file.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_file.py index 4b81201722..05749885c9 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_file.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/load/load_file.py @@ -1,8 +1,8 @@ import re from ayon_core.pipeline import get_representation_path -from ayon_core.hosts.aftereffects import api -from ayon_core.hosts.aftereffects.api.lib import get_unique_layer_name +from ayon_aftereffects import api +from ayon_aftereffects.api.lib import get_unique_layer_name class FileLoader(api.AfterEffectsLoader): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/add_publish_highlight.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/add_publish_highlight.py index 331d5281ed..b8a36bce44 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/add_publish_highlight.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/add_publish_highlight.py @@ -1,6 +1,6 @@ import pyblish.api -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class AddPublishHighlight(pyblish.api.InstancePlugin): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/closeAE.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/closeAE.py index c00591729e..3aa0a01854 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/closeAE.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/closeAE.py @@ -2,7 +2,7 @@ """Close AE after publish. For Webpublishing only.""" import pyblish.api -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class CloseAE(pyblish.api.ContextPlugin): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_audio.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_audio.py index c0ef0b71a4..3f7108186c 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_audio.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_audio.py @@ -2,7 +2,7 @@ import os import pyblish.api -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class CollectAudio(pyblish.api.ContextPlugin): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_current_file.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_current_file.py index aead872461..6a247d5234 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_current_file.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_current_file.py @@ -2,7 +2,7 @@ import os import pyblish.api -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class CollectCurrentFile(pyblish.api.ContextPlugin): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_extension_version.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_extension_version.py index 5b8393a49a..968943abc4 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_extension_version.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_extension_version.py @@ -2,7 +2,7 @@ import os import re import pyblish.api -from ayon_core.hosts.aftereffects.api import ( +from ayon_aftereffects.api import ( get_stub, get_extension_manifest_path ) diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_render.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_render.py index ebd4b8f944..3508512cba 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_render.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_render.py @@ -6,8 +6,8 @@ import pyblish.api from ayon_core.pipeline import publish from ayon_core.pipeline.publish import RenderInstance -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub @attr.s class AERenderInstance(RenderInstance): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_local_render.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_local_render.py index c5e62a2f54..9f152414e5 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_local_render.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_local_render.py @@ -1,8 +1,8 @@ import os from ayon_core.pipeline import publish -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class ExtractLocalRender(publish.Extractor): """Render RenderQueue locally.""" diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_save_scene.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_save_scene.py index f0007f96d9..165d1d081a 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_save_scene.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/extract_save_scene.py @@ -1,7 +1,7 @@ import pyblish.api from ayon_core.pipeline import publish -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class ExtractSaveScene(pyblish.api.ContextPlugin): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/increment_workfile.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/increment_workfile.py index fc51ff9176..9c1f79c477 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/increment_workfile.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/increment_workfile.py @@ -2,7 +2,7 @@ import pyblish.api from ayon_core.lib import version_up from ayon_core.pipeline.publish import get_errored_plugins_from_context -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class IncrementWorkfile(pyblish.api.InstancePlugin): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/remove_publish_highlight.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/remove_publish_highlight.py index 70b6efecb0..3367fa4e94 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/remove_publish_highlight.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/remove_publish_highlight.py @@ -1,5 +1,5 @@ from ayon_core.pipeline import publish -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class RemovePublishHighlight(publish.Extractor): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_footage_items.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_footage_items.py index ae20102417..1f23b1ef7c 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_footage_items.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_footage_items.py @@ -9,7 +9,7 @@ import pyblish.api from ayon_core.pipeline import ( PublishXmlValidationError ) -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class ValidateFootageItems(pyblish.api.InstancePlugin): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_instance_asset.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_instance_asset.py index c4411bd4c2..01d046938b 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_instance_asset.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_instance_asset.py @@ -5,7 +5,7 @@ from ayon_core.pipeline.publish import ( ValidateContentsOrder, PublishXmlValidationError, ) -from ayon_core.hosts.aftereffects.api import get_stub +from ayon_aftereffects.api import get_stub class ValidateInstanceFolderRepair(pyblish.api.Action): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py index 6375f5cc61..f5dd3ae1d0 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py @@ -13,7 +13,7 @@ from ayon_core.pipeline import ( PublishXmlValidationError, OptionalPyblishPluginMixin ) -from ayon_core.hosts.aftereffects.api import get_folder_settings +from ayon_aftereffects.api import get_folder_settings class ValidateSceneSettings(OptionalPyblishPluginMixin, diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/create_placeholder.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/create_placeholder.py index c7927f176f..79b820b01a 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/create_placeholder.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/create_placeholder.py @@ -2,9 +2,11 @@ from ayon_core.pipeline.workfile.workfile_template_builder import ( CreatePlaceholderItem, PlaceholderCreateMixin ) -from ayon_core.hosts.aftereffects.api import get_stub -from ayon_core.hosts.aftereffects.api.lib import set_settings -import ayon_core.hosts.aftereffects.api.workfile_template_builder as wtb +from ayon_aftereffects.api import ( + get_stub, + workfile_template_builder as wtb, +) +from ayon_aftereffects.api.lib import set_settings class AEPlaceholderCreatePlugin(wtb.AEPlaceholderPlugin, diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/load_placeholder.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/load_placeholder.py index 7f7e4f49ce..e4f021e5ff 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/load_placeholder.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/workfile_build/load_placeholder.py @@ -2,8 +2,10 @@ from ayon_core.pipeline.workfile.workfile_template_builder import ( LoadPlaceholderItem, PlaceholderLoadMixin ) -from ayon_core.hosts.aftereffects.api import get_stub -import ayon_core.hosts.aftereffects.api.workfile_template_builder as wtb +from ayon_aftereffects.api import ( + get_stub, + workfile_template_builder as wtb, +) class AEPlaceholderLoadPlugin(wtb.AEPlaceholderPlugin, PlaceholderLoadMixin): From bf390e4d1490eb64c723da80fd512cf92fe75b4d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 31 May 2024 16:50:24 +0200 Subject: [PATCH 3/8] updated package.py and bumped version --- client/ayon_core/addon/base.py | 1 + .../aftereffects/client/ayon_aftereffects/__init__.py | 3 +++ .../aftereffects/client/ayon_aftereffects/addon.py | 3 +++ .../aftereffects/client/ayon_aftereffects/version.py | 3 +++ server_addon/aftereffects/client/pyproject.toml | 6 ++++++ server_addon/aftereffects/package.py | 9 ++++++++- 6 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 server_addon/aftereffects/client/ayon_aftereffects/version.py create mode 100644 server_addon/aftereffects/client/pyproject.toml diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 56d5c46858..63914a283b 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -50,6 +50,7 @@ IGNORED_MODULES_IN_AYON = set() # When addon was moved from ayon-core codebase # - this is used to log the missing addon MOVED_ADDON_MILESTONE_VERSIONS = { + "aftereffects": VersionInfo(0, 2, 0), "applications": VersionInfo(0, 2, 0), "celaction": VersionInfo(0, 2, 0), "clockify": VersionInfo(0, 2, 0), diff --git a/server_addon/aftereffects/client/ayon_aftereffects/__init__.py b/server_addon/aftereffects/client/ayon_aftereffects/__init__.py index 02ab287629..e8de12e42e 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/__init__.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/__init__.py @@ -1,3 +1,4 @@ +from .version import __version__ from .addon import ( AFTEREFFECTS_ADDON_ROOT, AfterEffectsAddon, @@ -6,6 +7,8 @@ from .addon import ( __all__ = ( + "__version__", + "AFTEREFFECTS_ADDON_ROOT", "AfterEffectsAddon", "get_launch_script_path", diff --git a/server_addon/aftereffects/client/ayon_aftereffects/addon.py b/server_addon/aftereffects/client/ayon_aftereffects/addon.py index fc54043c1d..f659eba1cb 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/addon.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/addon.py @@ -2,11 +2,14 @@ import os from ayon_core.addon import AYONAddon, IHostAddon +from .version import __version__ + AFTEREFFECTS_ADDON_ROOT = os.path.dirname(os.path.abspath(__file__)) class AfterEffectsAddon(AYONAddon, IHostAddon): name = "aftereffects" + version = __version__ host_name = "aftereffects" def add_implementation_envs(self, env, _app): diff --git a/server_addon/aftereffects/client/ayon_aftereffects/version.py b/server_addon/aftereffects/client/ayon_aftereffects/version.py new file mode 100644 index 0000000000..8ab87ea78c --- /dev/null +++ b/server_addon/aftereffects/client/ayon_aftereffects/version.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +"""Package declaring AYON addon 'aftereffects' version.""" +__version__ = "0.2.0" diff --git a/server_addon/aftereffects/client/pyproject.toml b/server_addon/aftereffects/client/pyproject.toml new file mode 100644 index 0000000000..dcfaab09e6 --- /dev/null +++ b/server_addon/aftereffects/client/pyproject.toml @@ -0,0 +1,6 @@ +[project] +name="aftereffects" +description="AYON AfterEffects addon." + +[ayon.runtimeDependencies] +wsrpc_aiohttp = "^3.1.1" # websocket server diff --git a/server_addon/aftereffects/package.py b/server_addon/aftereffects/package.py index 7a2f9bc7af..8e4e70fc3b 100644 --- a/server_addon/aftereffects/package.py +++ b/server_addon/aftereffects/package.py @@ -1,3 +1,10 @@ name = "aftereffects" title = "AfterEffects" -version = "0.1.4" +version = "0.2.0" + +client_dir = "ayon_aftereffects" + +ayon_required_addons = { + "core": ">0.3.2", +} +ayon_compatible_addons = {} From 7365f9637260853d4fc33c9996379096a6ab2870 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 31 May 2024 16:52:35 +0200 Subject: [PATCH 4/8] added webserver to cliend codebase --- .../ayon_aftereffects/api/launch_logic.py | 2 +- .../client/ayon_aftereffects/api/webserver.py | 241 ++++++++++++++++++ .../client/ayon_aftereffects/api/ws_stub.py | 3 +- 3 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 server_addon/aftereffects/client/ayon_aftereffects/api/webserver.py diff --git a/server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py b/server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py index fb8702e20b..3a4fd0e719 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/api/launch_logic.py @@ -18,8 +18,8 @@ from ayon_core.lib import Logger, is_in_tests from ayon_core.pipeline import install_host from ayon_core.addon import AddonsManager from ayon_core.tools.utils import host_tools, get_ayon_qt_app -from ayon_core.tools.adobe_webserver.app import WebServerTool +from .webserver import WebServerTool from .ws_stub import get_stub from .lib import set_settings diff --git a/server_addon/aftereffects/client/ayon_aftereffects/api/webserver.py b/server_addon/aftereffects/client/ayon_aftereffects/api/webserver.py new file mode 100644 index 0000000000..aaecaa4c05 --- /dev/null +++ b/server_addon/aftereffects/client/ayon_aftereffects/api/webserver.py @@ -0,0 +1,241 @@ +"""Webserver for communication with AfterEffects. + +Aiohttp (Asyncio) based websocket server used for communication with host +application. + +This webserver is started in spawned Python process that opens DCC during +its launch, waits for connection from DCC and handles communication going +forward. Server is closed before Python process is killed. +""" +import os +import logging +import urllib +import threading +import asyncio +import socket + +from aiohttp import web + +from wsrpc_aiohttp import WSRPCClient + +from ayon_core.pipeline import get_global_context + +log = logging.getLogger(__name__) + + +class WebServerTool: + """ + Basic POC implementation of asychronic websocket RPC server. + Uses class in external_app_1.py to mimic implementation for single + external application. + 'test_client' folder contains two test implementations of client + """ + _instance = None + + def __init__(self): + WebServerTool._instance = self + + self.client = None + self.handlers = {} + self.on_stop_callbacks = [] + + port = None + host_name = "localhost" + websocket_url = os.getenv("WEBSOCKET_URL") + if websocket_url: + parsed = urllib.parse.urlparse(websocket_url) + port = parsed.port + host_name = parsed.netloc.split(":")[0] + if not port: + port = 8098 # fallback + + self.port = port + self.host_name = host_name + + self.app = web.Application() + + # add route with multiple methods for single "external app" + self.webserver_thread = WebServerThread(self, self.port) + + def add_route(self, *args, **kwargs): + self.app.router.add_route(*args, **kwargs) + + def add_static(self, *args, **kwargs): + self.app.router.add_static(*args, **kwargs) + + def start_server(self): + if self.webserver_thread and not self.webserver_thread.is_alive(): + self.webserver_thread.start() + + def stop_server(self): + self.stop() + + async def send_context_change(self, host): + """ + Calls running webserver to inform about context change + + Used when new PS/AE should be triggered, + but one already running, without + this publish would point to old context. + """ + client = WSRPCClient(os.getenv("WEBSOCKET_URL"), + loop=asyncio.get_event_loop()) + await client.connect() + + context = get_global_context() + project_name = context["project_name"] + folder_path = context["folder_path"] + task_name = context["task_name"] + log.info("Sending context change to {}{}/{}".format( + project_name, folder_path, task_name + )) + + await client.call( + '{}.set_context'.format(host), + project=project_name, + folder=folder_path, + task=task_name + ) + await client.close() + + def port_occupied(self, host_name, port): + """ + Check if 'url' is already occupied. + + This could mean, that app is already running and we are trying open it + again. In that case, use existing running webserver. + Check here is easier than capturing exception from thread. + """ + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as con: + result = con.connect_ex((host_name, port)) == 0 + + if result: + print(f"Port {port} is already in use") + return result + + def call(self, func): + log.debug("websocket.call {}".format(func)) + future = asyncio.run_coroutine_threadsafe( + func, + self.webserver_thread.loop + ) + result = future.result() + return result + + @staticmethod + def get_instance(): + if WebServerTool._instance is None: + WebServerTool() + return WebServerTool._instance + + @property + def is_running(self): + if not self.webserver_thread: + return False + return self.webserver_thread.is_running + + def stop(self): + if not self.is_running: + return + try: + log.debug("Stopping websocket server") + self.webserver_thread.is_running = False + self.webserver_thread.stop() + except Exception: + log.warning( + "Error has happened during Killing websocket server", + exc_info=True + ) + + def thread_stopped(self): + for callback in self.on_stop_callbacks: + callback() + + +class WebServerThread(threading.Thread): + """ Listener for websocket rpc requests. + + It would be probably better to "attach" this to main thread (as for + example Harmony needs to run something on main thread), but currently + it creates separate thread and separate asyncio event loop + """ + def __init__(self, module, port): + super(WebServerThread, self).__init__() + + self.is_running = False + self.port = port + self.module = module + self.loop = None + self.runner = None + self.site = None + self.tasks = [] + + def run(self): + self.is_running = True + + try: + log.info("Starting web server") + self.loop = asyncio.new_event_loop() # create new loop for thread + asyncio.set_event_loop(self.loop) + + self.loop.run_until_complete(self.start_server()) + + websocket_url = "ws://localhost:{}/ws".format(self.port) + + log.debug( + "Running Websocket server on URL: \"{}\"".format(websocket_url) + ) + + asyncio.ensure_future(self.check_shutdown(), loop=self.loop) + self.loop.run_forever() + except Exception: + self.is_running = False + log.warning( + "Websocket Server service has failed", exc_info=True + ) + raise + finally: + self.loop.close() # optional + + self.is_running = False + self.module.thread_stopped() + log.info("Websocket server stopped") + + async def start_server(self): + """ Starts runner and TCPsite """ + self.runner = web.AppRunner(self.module.app) + await self.runner.setup() + self.site = web.TCPSite(self.runner, 'localhost', self.port) + await self.site.start() + + def stop(self): + """Sets is_running flag to false, 'check_shutdown' shuts server down""" + self.is_running = False + + async def check_shutdown(self): + """ Future that is running and checks if server should be running + periodically. + """ + while self.is_running: + while self.tasks: + task = self.tasks.pop(0) + log.debug("waiting for task {}".format(task)) + await task + log.debug("returned value {}".format(task.result)) + + await asyncio.sleep(0.5) + + log.debug("Starting shutdown") + await self.site.stop() + log.debug("Site stopped") + await self.runner.cleanup() + log.debug("Runner stopped") + tasks = [task for task in asyncio.all_tasks() if + task is not asyncio.current_task()] + list(map(lambda task: task.cancel(), tasks)) # cancel all the tasks + results = await asyncio.gather(*tasks, return_exceptions=True) + log.debug(f'Finished awaiting cancelled tasks, results: {results}...') + await self.loop.shutdown_asyncgens() + # to really make sure everything else has time to stop + await asyncio.sleep(0.07) + self.loop.stop() diff --git a/server_addon/aftereffects/client/ayon_aftereffects/api/ws_stub.py b/server_addon/aftereffects/client/ayon_aftereffects/api/ws_stub.py index 869acc3405..60842e0612 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/api/ws_stub.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/api/ws_stub.py @@ -8,7 +8,8 @@ import logging import attr from wsrpc_aiohttp import WebSocketAsync -from ayon_core.tools.adobe_webserver.app import WebServerTool + +from .webserver import WebServerTool class ConnectionNotEstablishedYet(Exception): From 22e828bde5221d5e6a90281bba36556966e5173c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 31 May 2024 16:53:02 +0200 Subject: [PATCH 5/8] removed adobe webserver tool --- client/ayon_core/tools/adobe_webserver/app.py | 239 ------------------ .../tools/adobe_webserver/readme.txt | 12 - 2 files changed, 251 deletions(-) delete mode 100644 client/ayon_core/tools/adobe_webserver/app.py delete mode 100644 client/ayon_core/tools/adobe_webserver/readme.txt diff --git a/client/ayon_core/tools/adobe_webserver/app.py b/client/ayon_core/tools/adobe_webserver/app.py deleted file mode 100644 index 26bf638c91..0000000000 --- a/client/ayon_core/tools/adobe_webserver/app.py +++ /dev/null @@ -1,239 +0,0 @@ -"""This Webserver tool is python 3 specific. - -Don't import directly to avalon.tools or implementation of Python 2 hosts -would break. -""" -import os -import logging -import urllib -import threading -import asyncio -import socket - -from aiohttp import web - -from wsrpc_aiohttp import ( - WSRPCClient -) - -from ayon_core.pipeline import get_global_context - -log = logging.getLogger(__name__) - - -class WebServerTool: - """ - Basic POC implementation of asychronic websocket RPC server. - Uses class in external_app_1.py to mimic implementation for single - external application. - 'test_client' folder contains two test implementations of client - """ - _instance = None - - def __init__(self): - WebServerTool._instance = self - - self.client = None - self.handlers = {} - self.on_stop_callbacks = [] - - port = None - host_name = "localhost" - websocket_url = os.getenv("WEBSOCKET_URL") - if websocket_url: - parsed = urllib.parse.urlparse(websocket_url) - port = parsed.port - host_name = parsed.netloc.split(":")[0] - if not port: - port = 8098 # fallback - - self.port = port - self.host_name = host_name - - self.app = web.Application() - - # add route with multiple methods for single "external app" - self.webserver_thread = WebServerThread(self, self.port) - - def add_route(self, *args, **kwargs): - self.app.router.add_route(*args, **kwargs) - - def add_static(self, *args, **kwargs): - self.app.router.add_static(*args, **kwargs) - - def start_server(self): - if self.webserver_thread and not self.webserver_thread.is_alive(): - self.webserver_thread.start() - - def stop_server(self): - self.stop() - - async def send_context_change(self, host): - """ - Calls running webserver to inform about context change - - Used when new PS/AE should be triggered, - but one already running, without - this publish would point to old context. - """ - client = WSRPCClient(os.getenv("WEBSOCKET_URL"), - loop=asyncio.get_event_loop()) - await client.connect() - - context = get_global_context() - project_name = context["project_name"] - folder_path = context["folder_path"] - task_name = context["task_name"] - log.info("Sending context change to {}{}/{}".format( - project_name, folder_path, task_name - )) - - await client.call( - '{}.set_context'.format(host), - project=project_name, - folder=folder_path, - task=task_name - ) - await client.close() - - def port_occupied(self, host_name, port): - """ - Check if 'url' is already occupied. - - This could mean, that app is already running and we are trying open it - again. In that case, use existing running webserver. - Check here is easier than capturing exception from thread. - """ - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as con: - result = con.connect_ex((host_name, port)) == 0 - - if result: - print(f"Port {port} is already in use") - return result - - def call(self, func): - log.debug("websocket.call {}".format(func)) - future = asyncio.run_coroutine_threadsafe( - func, - self.webserver_thread.loop - ) - result = future.result() - return result - - @staticmethod - def get_instance(): - if WebServerTool._instance is None: - WebServerTool() - return WebServerTool._instance - - @property - def is_running(self): - if not self.webserver_thread: - return False - return self.webserver_thread.is_running - - def stop(self): - if not self.is_running: - return - try: - log.debug("Stopping websocket server") - self.webserver_thread.is_running = False - self.webserver_thread.stop() - except Exception: - log.warning( - "Error has happened during Killing websocket server", - exc_info=True - ) - - def thread_stopped(self): - for callback in self.on_stop_callbacks: - callback() - - -class WebServerThread(threading.Thread): - """ Listener for websocket rpc requests. - - It would be probably better to "attach" this to main thread (as for - example Harmony needs to run something on main thread), but currently - it creates separate thread and separate asyncio event loop - """ - def __init__(self, module, port): - super(WebServerThread, self).__init__() - - self.is_running = False - self.port = port - self.module = module - self.loop = None - self.runner = None - self.site = None - self.tasks = [] - - def run(self): - self.is_running = True - - try: - log.info("Starting web server") - self.loop = asyncio.new_event_loop() # create new loop for thread - asyncio.set_event_loop(self.loop) - - self.loop.run_until_complete(self.start_server()) - - websocket_url = "ws://localhost:{}/ws".format(self.port) - - log.debug( - "Running Websocket server on URL: \"{}\"".format(websocket_url) - ) - - asyncio.ensure_future(self.check_shutdown(), loop=self.loop) - self.loop.run_forever() - except Exception: - self.is_running = False - log.warning( - "Websocket Server service has failed", exc_info=True - ) - raise - finally: - self.loop.close() # optional - - self.is_running = False - self.module.thread_stopped() - log.info("Websocket server stopped") - - async def start_server(self): - """ Starts runner and TCPsite """ - self.runner = web.AppRunner(self.module.app) - await self.runner.setup() - self.site = web.TCPSite(self.runner, 'localhost', self.port) - await self.site.start() - - def stop(self): - """Sets is_running flag to false, 'check_shutdown' shuts server down""" - self.is_running = False - - async def check_shutdown(self): - """ Future that is running and checks if server should be running - periodically. - """ - while self.is_running: - while self.tasks: - task = self.tasks.pop(0) - log.debug("waiting for task {}".format(task)) - await task - log.debug("returned value {}".format(task.result)) - - await asyncio.sleep(0.5) - - log.debug("Starting shutdown") - await self.site.stop() - log.debug("Site stopped") - await self.runner.cleanup() - log.debug("Runner stopped") - tasks = [task for task in asyncio.all_tasks() if - task is not asyncio.current_task()] - list(map(lambda task: task.cancel(), tasks)) # cancel all the tasks - results = await asyncio.gather(*tasks, return_exceptions=True) - log.debug(f'Finished awaiting cancelled tasks, results: {results}...') - await self.loop.shutdown_asyncgens() - # to really make sure everything else has time to stop - await asyncio.sleep(0.07) - self.loop.stop() diff --git a/client/ayon_core/tools/adobe_webserver/readme.txt b/client/ayon_core/tools/adobe_webserver/readme.txt deleted file mode 100644 index d02d390277..0000000000 --- a/client/ayon_core/tools/adobe_webserver/readme.txt +++ /dev/null @@ -1,12 +0,0 @@ -Adobe webserver ---------------- -Aiohttp (Asyncio) based websocket server used for communication with host -applications, currently only for Adobe (but could be used for any non python -DCC which has websocket client). - -This webserver is started in spawned Python process that opens DCC during -its launch, waits for connection from DCC and handles communication going -forward. Server is closed before Python process is killed. - -(Different from `ayon_core/modules/webserver` as that one is running in Tray, -this one is running in spawn Python process.) \ No newline at end of file From 364e439f6c5085359f28d654fe6ba7ac76136d2f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 31 May 2024 16:56:12 +0200 Subject: [PATCH 6/8] added settings category --- .../client/ayon_aftereffects/plugins/publish/collect_review.py | 1 + .../ayon_aftereffects/plugins/publish/validate_scene_settings.py | 1 + 2 files changed, 2 insertions(+) diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_review.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_review.py index 667e9cf8b9..8074342cc8 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_review.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/collect_review.py @@ -14,6 +14,7 @@ class CollectReview(pyblish.api.ContextPlugin): label = "Collect Review" hosts = ["aftereffects"] order = pyblish.api.CollectorOrder + 0.1 + settings_category = "aftereffects" def process(self, context): for instance in context: diff --git a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py index f5dd3ae1d0..97fdee11ff 100644 --- a/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py +++ b/server_addon/aftereffects/client/ayon_aftereffects/plugins/publish/validate_scene_settings.py @@ -60,6 +60,7 @@ class ValidateSceneSettings(OptionalPyblishPluginMixin, label = "Validate Scene Settings" families = ["render.farm", "render.local", "render"] hosts = ["aftereffects"] + settings_category = "aftereffects" optional = True skip_timelines_check = [".*"] # * >> skip for all From f6417af5d3b5c4663d082927be62f24392f08e2e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 3 Jun 2024 15:29:26 +0200 Subject: [PATCH 7/8] change ignore for ruff --- pyproject.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 63d7434c06..9cbb4cc172 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,13 +78,13 @@ unfixable = [] dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" exclude = [ + "client/ayon_core/scripts/slates/__init__.py", + "client/ayon_core/modules/click_wrap.py", "client/ayon_core/hosts/unreal/integration/*", - "client/ayon_core/hosts/aftereffects/api/extension/js/libs/*", "client/ayon_core/hosts/hiero/api/startup/*", "client/ayon_core/modules/deadline/repository/custom/plugins/CelAction/*", "client/ayon_core/modules/deadline/repository/custom/plugins/HarmonyAYON/*", - "client/ayon_core/modules/click_wrap.py", - "client/ayon_core/scripts/slates/__init__.py" + "server_addon/aftereffects/client/ayon_aftereffects/api/extension/js/libs/*" ] [tool.ruff.lint.per-file-ignores] From edc798672a05af8ee55daca86fbb1b924d814f42 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 6 Jun 2024 11:17:41 +0200 Subject: [PATCH 8/8] Remove duplicated line --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ce0cc80864..2f30778519 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,7 +78,6 @@ unfixable = [] dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" exclude = [ - "client/ayon_core/scripts/slates/__init__.py", "client/ayon_core/hosts/unreal/integration/*", "client/ayon_core/modules/deadline/repository/custom/plugins/CelAction/*", "client/ayon_core/modules/deadline/repository/custom/plugins/HarmonyAYON/*",