change how current context can be changed

This commit is contained in:
Jakub Trllo 2024-03-04 15:09:13 +01:00
parent 4fade180eb
commit 02eef200a1

View file

@ -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