diff --git a/openpype/lib/__init__.py b/openpype/lib/__init__.py index 895d11601f..f0b2db4c1c 100644 --- a/openpype/lib/__init__.py +++ b/openpype/lib/__init__.py @@ -112,6 +112,7 @@ from .profiles_filtering import filter_profiles from .plugin_tools import ( TaskNotSetError, get_subset_name, + prepare_template_data, filter_pyblish_plugins, source_hash, get_unique_layer_name, diff --git a/openpype/lib/plugin_tools.py b/openpype/lib/plugin_tools.py index 9a2d30d1a7..4119ba072a 100644 --- a/openpype/lib/plugin_tools.py +++ b/openpype/lib/plugin_tools.py @@ -73,6 +73,23 @@ def get_subset_name( ("family", family), ("task", task_name) ) + return template.format(**prepare_template_data(fill_pairs)) + + +def prepare_template_data(fill_pairs): + """ + Prepares formatted data for filling template. + + It produces mutliple variants of keys (key, Key, KEY) to control + format of filled template. + + Args: + fill_pairs (iterable) of tuples (key, value) + Returns: + (dict) + ('host', 'maya') > {'host':'maya', 'Host': 'Maya', 'HOST': 'MAYA'} + + """ fill_data = {} for key, value in fill_pairs: # Handle cases when value is `None` (standalone publisher) @@ -94,7 +111,7 @@ def get_subset_name( capitalized += value[1:] fill_data[key.capitalize()] = capitalized - return template.format(**fill_data) + return fill_data def filter_pyblish_plugins(plugins): diff --git a/openpype/plugins/publish/integrate_new.py b/openpype/plugins/publish/integrate_new.py index f74325fe09..19b12e953d 100644 --- a/openpype/plugins/publish/integrate_new.py +++ b/openpype/plugins/publish/integrate_new.py @@ -12,11 +12,13 @@ import shutil from pymongo import DeleteOne, InsertOne import pyblish.api from avalon import io +from avalon.api import format_template_with_optional_keys from avalon.vendor import filelink import openpype.api from datetime import datetime # from pype.modules import ModulesManager from openpype.lib.profiles_filtering import filter_profiles +from openpype.lib import prepare_template_data # this is needed until speedcopy for linux is fixed if sys.platform == "win32": @@ -730,7 +732,7 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin): profiles = integrate_new_sett["subset_grouping_profiles"] filtering_criteria = { - "families": instance.data["anatomyData"]["family"], + "families": instance.data["family"], "hosts": instance.data["anatomyData"]["app"], "tasks": instance.data["anatomyData"]["task"] or io.Session["AVALON_TASK"] @@ -738,17 +740,20 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin): matching_profile = filter_profiles(profiles, filtering_criteria) filled_template = None - fill_pairs = None if matching_profile: template = matching_profile["template"] - fill_pairs = { - "family": filtering_criteria["families"], - "task": filtering_criteria["tasks"], - "Family": filtering_criteria["families"].capitalize(), - "Task": filtering_criteria["tasks"].capitalize() - } + fill_pairs = ( + ("family", filtering_criteria["families"]), + ("task", filtering_criteria["tasks"]), + ("host", filtering_criteria["hosts"]), + ("subset", instance.data["subset"]), + ("renderlayer", instance.data.get("renderlayer")) + ) + fill_pairs = prepare_template_data(fill_pairs) + try: - filled_template = template.format(**fill_pairs) + filled_template = \ + format_template_with_optional_keys(fill_pairs, template) except KeyError: keys = [] if fill_pairs: diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json index 5c8b339a1f..581b22545c 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json @@ -427,7 +427,7 @@ "children": [ { "type": "label", - "label": "Set all published instances as a part of specific group named according to 'Template'.
Implemented placeholders [{task},{Task},{family},{Family}]" + "label": "Set all published instances as a part of specific group named according to 'Template'.
Implemented all variants of placeholders [{task},{family},{host},{subset},{renderlayer}]" }, { "key": "families",