mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
change how current context can be changed
This commit is contained in:
parent
4fade180eb
commit
02eef200a1
1 changed files with 48 additions and 41 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue