diff --git a/openpype/hosts/harmony/plugins/publish/collect_farm_render.py b/openpype/hosts/harmony/plugins/publish/collect_farm_render.py index fc80e7c029..31a249591e 100644 --- a/openpype/hosts/harmony/plugins/publish/collect_farm_render.py +++ b/openpype/hosts/harmony/plugins/publish/collect_farm_render.py @@ -126,7 +126,8 @@ class CollectFarmRender(openpype.lib.abstract_collect_render. # because of using 'renderFarm' as a family, replace 'Farm' with # capitalized task name - issue of avalon-core Creator app subset_name = node.split("/")[1] - task_name = context.data["anatomyData"]["task"].capitalize() + task_name = context.data["anatomyData"]["task"][ + "name"].capitalize() replace_str = "" if task_name.lower() not in subset_name.lower(): replace_str = task_name diff --git a/openpype/hosts/harmony/plugins/publish/collect_palettes.py b/openpype/hosts/harmony/plugins/publish/collect_palettes.py index b8671badb3..e47cbaf17e 100644 --- a/openpype/hosts/harmony/plugins/publish/collect_palettes.py +++ b/openpype/hosts/harmony/plugins/publish/collect_palettes.py @@ -28,7 +28,7 @@ class CollectPalettes(pyblish.api.ContextPlugin): # skip collecting if not in allowed task if self.allowed_tasks: - task_name = context.data["anatomyData"]["task"].lower() + task_name = context.data["anatomyData"]["task"]["name"].lower() if (not any([re.search(pattern, task_name) for pattern in self.allowed_tasks])): return diff --git a/openpype/hosts/standalonepublisher/plugins/publish/collect_harmony_scenes.py b/openpype/hosts/standalonepublisher/plugins/publish/collect_harmony_scenes.py index a4fed3bc3f..f76e46bc78 100644 --- a/openpype/hosts/standalonepublisher/plugins/publish/collect_harmony_scenes.py +++ b/openpype/hosts/standalonepublisher/plugins/publish/collect_harmony_scenes.py @@ -49,10 +49,26 @@ class CollectHarmonyScenes(pyblish.api.InstancePlugin): # fix anatomy data anatomy_data_new = copy.deepcopy(anatomy_data) + + project_entity = context.data["projectEntity"] + asset_entity = context.data["assetEntity"] + + task_type = asset_entity["data"]["tasks"].get(task, {}).get("type") + + if task_type: + task_code = project_entity["config"]["tasks"][task_type][ + "short_name"] + else: + task_code = None + # updating hierarchy data anatomy_data_new.update({ "asset": asset_data["name"], - "task": task, + "task": { + "name": task, + "type": task_type, + "short": task_code, + }, "subset": subset_name }) diff --git a/openpype/hosts/standalonepublisher/plugins/publish/collect_harmony_zips.py b/openpype/hosts/standalonepublisher/plugins/publish/collect_harmony_zips.py index 93eff85486..f7282ae6e9 100644 --- a/openpype/hosts/standalonepublisher/plugins/publish/collect_harmony_zips.py +++ b/openpype/hosts/standalonepublisher/plugins/publish/collect_harmony_zips.py @@ -27,6 +27,7 @@ class CollectHarmonyZips(pyblish.api.InstancePlugin): anatomy_data = instance.context.data["anatomyData"] repres = instance.data["representations"] files = repres[0]["files"] + project_entity = context.data["projectEntity"] if files.endswith(".zip"): # A zip file was dropped @@ -45,14 +46,28 @@ class CollectHarmonyZips(pyblish.api.InstancePlugin): self.log.info("Copied data: {}".format(new_instance.data)) + task_type = asset_data["data"]["tasks"].get(task, {}).get("type") + + if task_type: + task_code = project_entity["config"]["tasks"][task_type][ + "short_name"] + else: + task_code = None + # fix anatomy data anatomy_data_new = copy.deepcopy(anatomy_data) # updating hierarchy data - anatomy_data_new.update({ - "asset": asset_data["name"], - "task": task, - "subset": subset_name - }) + anatomy_data_new.update( + { + "asset": asset_data["name"], + "task": { + "name": task, + "type": task_type, + "short": task_code, + }, + "subset": subset_name, + } + ) new_instance.data["label"] = f"{instance_name}" new_instance.data["subset"] = subset_name diff --git a/openpype/hosts/standalonepublisher/plugins/publish/extract_harmony_zip.py b/openpype/hosts/standalonepublisher/plugins/publish/extract_harmony_zip.py index fd89b089c4..2318c6176f 100644 --- a/openpype/hosts/standalonepublisher/plugins/publish/extract_harmony_zip.py +++ b/openpype/hosts/standalonepublisher/plugins/publish/extract_harmony_zip.py @@ -31,8 +31,10 @@ class ExtractHarmonyZip(openpype.api.Extractor): # Presets create_workfile = True - default_task = "harmonyIngest" - default_task_type = "Ingest" + default_task = { + "name": "harmonyIngest", + "type": "Ingest", + } default_task_status = "Ingested" assetversion_status = "Ingested" @@ -220,9 +222,9 @@ class ExtractHarmonyZip(openpype.api.Extractor): anatomy = openpype.api.Anatomy() project_entity = instance.context.data["projectEntity"] - task_name = instance.data.get("task") - task_type = instance.data['tasks'].get(task_name, {}).get('type') - task_short = project_entity['config']['tasks'][task_type]['short_name'] + task_name = instance.data.get("task").get("name") + task_type = instance.data.get("task").get("type") + task_short = instance.data.get("task").get("short") data = { "root": api.registered_root(), diff --git a/openpype/lib/applications.py b/openpype/lib/applications.py index cc8cb8e7be..c536f9fd15 100644 --- a/openpype/lib/applications.py +++ b/openpype/lib/applications.py @@ -1361,6 +1361,10 @@ def _prepare_last_workfile(data, workdir, workfile_template_key): anatomy = data["anatomy"] # Find last workfile file_template = anatomy.templates["work"]["file"] + # Replace {task} by '{task[name]}' for backward compatibility + if '{task}' in file_template: + file_template = file_template.replace('{task}', '{task[name]}') + workdir_data.update({ "version": 1, "user": get_openpype_username(), diff --git a/openpype/modules/default_modules/ftrack/plugins/publish/collect_ftrack_api.py b/openpype/modules/default_modules/ftrack/plugins/publish/collect_ftrack_api.py index a348617cfc..984e76d8ca 100644 --- a/openpype/modules/default_modules/ftrack/plugins/publish/collect_ftrack_api.py +++ b/openpype/modules/default_modules/ftrack/plugins/publish/collect_ftrack_api.py @@ -109,7 +109,7 @@ class CollectFtrackApi(pyblish.api.ContextPlugin): "Checking entities of instance \"{}\"".format(str(instance)) ) instance_asset_name = instance.data.get("asset") - instance_task_name = instance.data.get("task") + instance_task_name = instance.data.get("task").get("name") if not instance_asset_name and not instance_task_name: self.log.debug("Instance does not have set context keys.") diff --git a/openpype/plugins/publish/collect_anatomy_context_data.py b/openpype/plugins/publish/collect_anatomy_context_data.py index ec88d5669d..7d6482e911 100644 --- a/openpype/plugins/publish/collect_anatomy_context_data.py +++ b/openpype/plugins/publish/collect_anatomy_context_data.py @@ -54,6 +54,15 @@ class CollectAnatomyContextData(pyblish.api.ContextPlugin): if hierarchy_items: hierarchy = os.path.join(*hierarchy_items) + task_type = asset_entity['data']['tasks'].get( + task_name, {}).get('type') + + if task_type: + task_code = project_entity['config']['tasks'][task_type][ + 'short_name'] + else: + task_code = None + context_data = { "project": { "name": project_entity["name"], @@ -61,7 +70,11 @@ class CollectAnatomyContextData(pyblish.api.ContextPlugin): }, "asset": asset_entity["name"], "hierarchy": hierarchy.replace("\\", "/"), - "task": task_name, + "task": { + "name": task_name, + "type": task_type, + "short": task_code, + }, "username": context.data["user"], "app": context.data["hostName"] } diff --git a/openpype/plugins/publish/collect_anatomy_instance_data.py b/openpype/plugins/publish/collect_anatomy_instance_data.py index 4fd657167c..e8eba0c5d3 100644 --- a/openpype/plugins/publish/collect_anatomy_instance_data.py +++ b/openpype/plugins/publish/collect_anatomy_instance_data.py @@ -238,9 +238,9 @@ class CollectAnatomyInstanceData(pyblish.api.ContextPlugin): anatomy_updates["hierarchy"] = "/".join(parents) # Task - task_name = instance.data.get("task") - if task_name: - anatomy_updates["task"] = task_name + task_info = instance.data.get("task") + if task_info: + anatomy_updates["task"] = task_info # Additional data resolution_width = instance.data.get("resolutionWidth") diff --git a/openpype/plugins/publish/integrate_new.py b/openpype/plugins/publish/integrate_new.py index 451ea1d80d..16b936c0e6 100644 --- a/openpype/plugins/publish/integrate_new.py +++ b/openpype/plugins/publish/integrate_new.py @@ -171,19 +171,13 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin): anatomy_data["hierarchy"] = hierarchy # Make sure task name in anatomy data is same as on instance.data - task_name = instance.data.get("task") - if task_name: - anatomy_data["task"] = task_name + task_info = instance.data.get("task") + if task_info: + anatomy_data["task"] = task_info else: - # Just set 'task_name' variable to context task - task_name = anatomy_data["task"] + # Just set 'task_info' variable to context task + task_info = anatomy_data["task"] - # Find task type for current task name - # - this should be already prepared on instance - asset_tasks = ( - asset_entity.get("data", {}).get("tasks") - ) or {} - task_info = asset_tasks.get(task_name) or {} task_type = task_info.get("type") instance.data["task_type"] = task_type @@ -321,7 +315,7 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin): key_values = { "families": family, - "tasks": task_name, + "tasks": task_info.get("name"), "hosts": instance.context.data["hostName"], "task_types": task_type } @@ -804,7 +798,7 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin): # data? # - should we use context task in that case? task_name = ( - instance.data["anatomyData"]["task"] + instance.data["anatomyData"]["task"].get("name") or io.Session["AVALON_TASK"] ) task_type = instance.data["task_type"]