mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #795 from ynput/feature/faster-cli-init
Chore: Faster cli initalization
This commit is contained in:
commit
adb4fdf394
2 changed files with 60 additions and 45 deletions
|
|
@ -12,7 +12,11 @@ import acre
|
|||
from ayon_core import AYON_CORE_ROOT
|
||||
from ayon_core.addon import AddonsManager
|
||||
from ayon_core.settings import get_general_environments
|
||||
from ayon_core.lib import initialize_ayon_connection, is_running_from_build
|
||||
from ayon_core.lib import (
|
||||
initialize_ayon_connection,
|
||||
is_running_from_build,
|
||||
Logger,
|
||||
)
|
||||
|
||||
from .cli_commands import Commands
|
||||
|
||||
|
|
@ -64,7 +68,6 @@ def tray():
|
|||
Commands.launch_tray()
|
||||
|
||||
|
||||
@Commands.add_addons
|
||||
@main_cli.group(help="Run command line arguments of AYON addons")
|
||||
@click.pass_context
|
||||
def addon(ctx):
|
||||
|
|
@ -80,6 +83,7 @@ main_cli.set_alias("addon", "module")
|
|||
|
||||
|
||||
@main_cli.command()
|
||||
@click.pass_context
|
||||
@click.argument("output_json_path")
|
||||
@click.option("--project", help="Project name", default=None)
|
||||
@click.option("--asset", help="Folder path", default=None)
|
||||
|
|
@ -88,7 +92,9 @@ main_cli.set_alias("addon", "module")
|
|||
@click.option(
|
||||
"--envgroup", help="Environment group (e.g. \"farm\")", default=None
|
||||
)
|
||||
def extractenvironments(output_json_path, project, asset, task, app, envgroup):
|
||||
def extractenvironments(
|
||||
ctx, output_json_path, project, asset, task, app, envgroup
|
||||
):
|
||||
"""Extract environment variables for entered context to a json file.
|
||||
|
||||
Entered output filepath will be created if does not exists.
|
||||
|
|
@ -103,23 +109,30 @@ def extractenvironments(output_json_path, project, asset, task, app, envgroup):
|
|||
'addon applications extractenvironments ...' instead.
|
||||
"""
|
||||
Commands.extractenvironments(
|
||||
output_json_path, project, asset, task, app, envgroup
|
||||
output_json_path,
|
||||
project,
|
||||
asset,
|
||||
task,
|
||||
app,
|
||||
envgroup,
|
||||
ctx.obj["addons_manager"]
|
||||
)
|
||||
|
||||
|
||||
@main_cli.command()
|
||||
@click.pass_context
|
||||
@click.argument("path", required=True)
|
||||
@click.option("-t", "--targets", help="Targets", default=None,
|
||||
multiple=True)
|
||||
@click.option("-g", "--gui", is_flag=True,
|
||||
help="Show Publish UI", default=False)
|
||||
def publish(path, targets, gui):
|
||||
def publish(ctx, path, targets, gui):
|
||||
"""Start CLI publishing.
|
||||
|
||||
Publish collects json from path provided as an argument.
|
||||
S
|
||||
|
||||
"""
|
||||
Commands.publish(path, targets, gui)
|
||||
Commands.publish(path, targets, gui, ctx.obj["addons_manager"])
|
||||
|
||||
|
||||
@main_cli.command(context_settings={"ignore_unknown_options": True})
|
||||
|
|
@ -245,11 +258,9 @@ def _set_global_environments() -> None:
|
|||
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
|
||||
|
||||
|
||||
def _set_addons_environments():
|
||||
def _set_addons_environments(addons_manager):
|
||||
"""Set global environments for AYON addons."""
|
||||
|
||||
addons_manager = AddonsManager()
|
||||
|
||||
# Merge environments with current environments and update values
|
||||
if module_envs := addons_manager.collect_global_environments():
|
||||
parsed_envs = acre.parse(module_envs)
|
||||
|
|
@ -258,6 +269,21 @@ def _set_addons_environments():
|
|||
os.environ.update(env)
|
||||
|
||||
|
||||
def _add_addons(addons_manager):
|
||||
"""Modules/Addons can add their cli commands dynamically."""
|
||||
log = Logger.get_logger("CLI-AddAddons")
|
||||
for addon_obj in addons_manager.addons:
|
||||
try:
|
||||
addon_obj.cli(addon)
|
||||
|
||||
except Exception:
|
||||
log.warning(
|
||||
"Failed to add cli command for module \"{}\"".format(
|
||||
addon_obj.name
|
||||
), exc_info=True
|
||||
)
|
||||
|
||||
|
||||
def main(*args, **kwargs):
|
||||
initialize_ayon_connection()
|
||||
python_path = os.getenv("PYTHONPATH", "")
|
||||
|
|
@ -281,10 +307,14 @@ def main(*args, **kwargs):
|
|||
print(" - global AYON ...")
|
||||
_set_global_environments()
|
||||
print(" - for addons ...")
|
||||
_set_addons_environments()
|
||||
|
||||
addons_manager = AddonsManager()
|
||||
_set_addons_environments(addons_manager)
|
||||
_add_addons(addons_manager)
|
||||
try:
|
||||
main_cli(obj={}, prog_name="ayon")
|
||||
main_cli(
|
||||
prog_name="ayon",
|
||||
obj={"addons_manager": addons_manager},
|
||||
)
|
||||
except Exception: # noqa
|
||||
exc_info = sys.exc_info()
|
||||
print("!!! AYON crashed:")
|
||||
|
|
|
|||
|
|
@ -3,6 +3,9 @@
|
|||
import os
|
||||
import sys
|
||||
import warnings
|
||||
from typing import Optional, List
|
||||
|
||||
from ayon_core.addon import AddonsManager
|
||||
|
||||
|
||||
class Commands:
|
||||
|
|
@ -20,36 +23,21 @@ class Commands:
|
|||
tray.main()
|
||||
|
||||
@staticmethod
|
||||
def add_addons(click_func):
|
||||
"""Modules/Addons can add their cli commands dynamically."""
|
||||
|
||||
from ayon_core.lib import Logger
|
||||
from ayon_core.addon import AddonsManager
|
||||
|
||||
manager = AddonsManager()
|
||||
log = Logger.get_logger("CLI-AddModules")
|
||||
for addon in manager.addons:
|
||||
try:
|
||||
addon.cli(click_func)
|
||||
|
||||
except Exception:
|
||||
log.warning(
|
||||
"Failed to add cli command for module \"{}\"".format(
|
||||
addon.name
|
||||
), exc_info=True
|
||||
)
|
||||
return click_func
|
||||
|
||||
@staticmethod
|
||||
def publish(path: str, targets: list=None, gui:bool=False) -> None:
|
||||
def publish(
|
||||
path: str,
|
||||
targets: Optional[List[str]] = None,
|
||||
gui: Optional[bool] = False,
|
||||
addons_manager: Optional[AddonsManager] = None,
|
||||
) -> None:
|
||||
"""Start headless publishing.
|
||||
|
||||
Publish use json from passed path argument.
|
||||
|
||||
Args:
|
||||
path (str): Path to JSON.
|
||||
targets (list of str): List of pyblish targets.
|
||||
gui (bool): Show publish UI.
|
||||
targets (Optional[List[str]]): List of pyblish targets.
|
||||
gui (Optional[bool]): Show publish UI.
|
||||
addons_manager (Optional[AddonsManager]): Addons manager instance.
|
||||
|
||||
Raises:
|
||||
RuntimeError: When there is no path to process.
|
||||
|
|
@ -102,14 +90,15 @@ class Commands:
|
|||
|
||||
install_ayon_plugins()
|
||||
|
||||
manager = AddonsManager()
|
||||
if addons_manager is None:
|
||||
addons_manager = AddonsManager()
|
||||
|
||||
publish_paths = manager.collect_plugin_paths()["publish"]
|
||||
publish_paths = addons_manager.collect_plugin_paths()["publish"]
|
||||
|
||||
for plugin_path in publish_paths:
|
||||
pyblish.api.register_plugin_path(plugin_path)
|
||||
|
||||
applications_addon = manager.get_enabled_addon("applications")
|
||||
applications_addon = addons_manager.get_enabled_addon("applications")
|
||||
if applications_addon is not None:
|
||||
context = get_global_context()
|
||||
env = applications_addon.get_farm_publish_environment_variables(
|
||||
|
|
@ -158,15 +147,12 @@ class Commands:
|
|||
|
||||
@staticmethod
|
||||
def extractenvironments(
|
||||
output_json_path, project, asset, task, app, env_group
|
||||
output_json_path, project, asset, task, app, env_group, addons_manager
|
||||
):
|
||||
"""Produces json file with environment based on project and app.
|
||||
|
||||
Called by Deadline plugin to propagate environment into render jobs.
|
||||
"""
|
||||
|
||||
from ayon_core.addon import AddonsManager
|
||||
|
||||
warnings.warn(
|
||||
(
|
||||
"Command 'extractenvironments' is deprecated and will be"
|
||||
|
|
@ -176,7 +162,6 @@ class Commands:
|
|||
DeprecationWarning
|
||||
)
|
||||
|
||||
addons_manager = AddonsManager()
|
||||
applications_addon = addons_manager.get_enabled_addon("applications")
|
||||
if applications_addon is None:
|
||||
raise RuntimeError(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue