From 02eef200a18cacc40e394e6e53a3040fc57e786e Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 4 Mar 2024 15:09:13 +0100 Subject: [PATCH] change how current context can be changed --- client/ayon_core/pipeline/context_tools.py | 89 ++++++++++++---------- 1 file changed, 48 insertions(+), 41 deletions(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 93fc329081..bda994490d 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -13,10 +13,7 @@ from pyblish.lib import MessageHandler from ayon_core import AYON_CORE_ROOT from ayon_core.host import HostBase from ayon_core.client import ( - get_asset_by_id, - get_asset_by_name, version_is_latest, - get_asset_name_identifier, get_ayon_server_api_connection, ) from ayon_core.lib import is_in_tests @@ -404,46 +401,52 @@ def get_current_project_entity(fields=None): This function should be called only in process where host is installed. - Returns: - dict: Project document. - None: Project is not set. - """ + Args: + fields (Optional[Iterable[str]]): Limit returned data of project + entity. + Returns: + Union[dict[str, Any], None]: Project entity of current project or None. + + """ project_name = get_current_project_name() return ayon_api.get_project(project_name, fields=fields) -def get_current_project_asset(asset_name=None, asset_id=None, fields=None): - """Helper function to get asset document based on global Session. +def get_current_project_folder(folder_path=None, folder_id=None, fields=None): + """Helper function to get folder entity based on current context. This function should be called only in process where host is installed. - Asset is found out based on passed asset name or id (not both). Asset name - is not used for filtering if asset id is passed. When both asset name and - id are missing then asset name from current process is used. + Folder is found out based on passed folder path or id (not both). Folder + path is not used for filtering if folder id is passed. When both + folder path and id are missing then current folder path is used. Args: - asset_name (str): Name of asset used for filter. - asset_id (Union[str, ObjectId]): Asset document id. If entered then + folder_path (Union[str, None]): Folder path used for filter. + folder_id (Union[str, None]): Folder id. If entered then is used as only filter. - fields (Union[List[str], None]): Limit returned data of asset documents + fields (Optional[Iterable[str]]): Limit returned data of folder entity to specific keys. Returns: - dict: Asset document. - None: Asset is not set or not exist. + Union[dict[str, Any], None]: Fodler entity or None. """ project_name = get_current_project_name() - if asset_id: - return get_asset_by_id(project_name, asset_id, fields=fields) + if folder_id: + return ayon_api.get_folder_by_id( + project_name, folder_id, fields=fields + ) - if not asset_name: - asset_name = get_current_folder_path() + if not folder_path: + folder_path = get_current_folder_path() # Skip if is not set even on context - if not asset_name: + if not folder_path: return None - return get_asset_by_name(project_name, asset_name, fields=fields) + return ayon_api.get_folder_by_path( + project_name, folder_path, fields=fields + ) def is_representation_from_latest(representation): @@ -475,18 +478,18 @@ def get_template_data_from_session(session=None, settings=None): if session is not None: project_name = session["AYON_PROJECT_NAME"] - asset_name = session["AYON_FOLDER_PATH"] + folder_path = session["AYON_FOLDER_PATH"] task_name = session["AYON_TASK_NAME"] host_name = session["AYON_HOST_NAME"] else: context = get_current_context() project_name = context["project_name"] - asset_name = context["folder_path"] + folder_path = context["folder_path"] task_name = context["task_name"] host_name = get_current_host_name() return get_template_data_with_names( - project_name, asset_name, task_name, host_name, settings + project_name, folder_path, task_name, host_name, settings ) @@ -503,12 +506,12 @@ def get_current_context_template_data(settings=None): context = get_current_context() project_name = context["project_name"] - asset_name = context["folder_path"] + folder_path = context["folder_path"] task_name = context["task_name"] host_name = get_current_host_name() return get_template_data_with_names( - project_name, asset_name, task_name, host_name, settings + project_name, folder_path, task_name, host_name, settings ) @@ -536,9 +539,9 @@ def get_workdir_from_session(session=None, template_key=None): if not template_key: task_type = template_data["task"]["type"] template_key = get_workfile_template_key( + project_name, task_type, host_name, - project_name=project_name ) anatomy = Anatomy(project_name) @@ -568,33 +571,33 @@ def get_custom_workfile_template_from_session( if session is not None: project_name = session["AYON_PROJECT_NAME"] - asset_name = session["AYON_FOLDER_PATH"] + folder_path = session["AYON_FOLDER_PATH"] task_name = session["AYON_TASK_NAME"] host_name = session["AYON_HOST_NAME"] else: context = get_current_context() project_name = context["project_name"] - asset_name = context["folder_path"] + folder_path = context["folder_path"] task_name = context["task_name"] host_name = get_current_host_name() return get_custom_workfile_template_by_string_context( project_name, - asset_name, + folder_path, task_name, host_name, project_settings=project_settings ) -def change_current_context(asset_doc, task_name, template_key=None): +def change_current_context(folder_entity, task_entity, template_key=None): """Update active Session to a new task work area. - This updates the live Session to a different task under asset. + This updates the live Session to a different task under folder. Args: - asset_doc (Dict[str, Any]): The asset document to set. - task_name (str): The task to set under asset. + folder_entity (Dict[str, Any]): Folder entity to set. + task_entity (Dict[str, Any]): Task entity to set. template_key (Union[str, None]): Prepared template key to be used for workfile template in Anatomy. @@ -604,18 +607,22 @@ def change_current_context(asset_doc, task_name, template_key=None): project_name = get_current_project_name() workdir = None - if asset_doc: + folder_path = None + task_name = None + if folder_entity: + folder_path = folder_entity["path"] + if task_entity: + task_name = task_entity["name"] project_entity = ayon_api.get_project(project_name) host_name = get_current_host_name() workdir = get_workdir( project_entity, - asset_doc, - task_name, + folder_entity, + task_entity, host_name, template_key=template_key ) - folder_path = get_asset_name_identifier(asset_doc) envs = { "AYON_PROJECT_NAME": project_name, "AYON_FOLDER_PATH": folder_path, @@ -635,7 +642,7 @@ def change_current_context(asset_doc, task_name, template_key=None): # Convert env keys to human readable keys data["project_name"] = project_name - data["folder_path"] = get_asset_name_identifier(asset_doc) + data["folder_path"] = folder_path data["task_name"] = task_name data["workdir_path"] = workdir