diff --git a/openpype/lib/__init__.py b/openpype/lib/__init__.py index 7dd9a8793b0..f425962ba11 100644 --- a/openpype/lib/__init__.py +++ b/openpype/lib/__init__.py @@ -90,6 +90,7 @@ get_workdir_data, get_workdir, get_workdir_with_workdir_data, + get_main_task, create_workfile_doc, save_workfile_data_to_doc, @@ -228,6 +229,7 @@ "get_workdir_data", "get_workdir", "get_workdir_with_workdir_data", + "get_main_task", "create_workfile_doc", "save_workfile_data_to_doc", diff --git a/openpype/lib/avalon_context.py b/openpype/lib/avalon_context.py index 12545806571..f9480fbf520 100644 --- a/openpype/lib/avalon_context.py +++ b/openpype/lib/avalon_context.py @@ -375,6 +375,30 @@ def get_latest_version(asset_name, subset_name, dbcon=None, project_name=None): return version_doc +def get_main_task(asset_doc, task_name): + """Retrieve main_task from avalon asset requested task + + Return the main task if there is one, return the task otherwise. + + Args: + asset_id (int): Id of asset under which the task belongs. + task_name (str): Name of task to retrieve main_task from. + Returns: + str: main task name if there is one, task name otherwise. + """ + + if asset_doc: + main_task = ( + asset_doc.get("data", {}) + .get("tasks", {}) + .get(task_name, {}) + .get("main_task", None) + ) + if main_task: + return main_task + return task_name + + def get_workfile_template_key_from_context( asset_name, task_name, host_name, project_name=None, dbcon=None, project_settings=None @@ -520,6 +544,10 @@ def get_workdir_data(project_doc, asset_doc, task_name, host_name): if asset_parents: parent_name = asset_parents[-1] + main_task = get_main_task(asset_doc, task_name) + if main_task: + task_name = main_task + data = { "project": { "name": project_doc["name"], diff --git a/openpype/tools/workfiles/app.py b/openpype/tools/workfiles/app.py index 9dab8026535..826f98fcb06 100644 --- a/openpype/tools/workfiles/app.py +++ b/openpype/tools/workfiles/app.py @@ -23,6 +23,7 @@ from openpype.tools.utils.delegates import PrettyTimeDelegate from openpype.lib import ( Anatomy, + get_main_task, get_workdir, get_workfile_doc, create_workfile_doc, @@ -423,7 +424,11 @@ def set_asset_task(self, asset_id, task_name, task_type): if asset_id != self._asset_id: self._asset_doc = None self._asset_id = asset_id - self._task_name = task_name + asset_doc = io.find_one( + {"type": "asset", "_id": asset_id}, + {"data": True} + ) + self._task_name = get_main_task(asset_doc, task_name) self._task_type = task_type # Define a custom session so we can query the work root @@ -451,6 +456,8 @@ def set_asset_task(self, asset_id, task_name, task_type): # Manually trigger file selection self.on_file_select() + self._task_name = task_name + def _get_asset_doc(self): if self._asset_id is None: return None