diff --git a/openpype/modules/ftrack/plugins/publish/integrate_ftrack_note.py b/openpype/modules/ftrack/plugins/publish/integrate_ftrack_note.py
index 77a7ebdfcf..ac3fa874e0 100644
--- a/openpype/modules/ftrack/plugins/publish/integrate_ftrack_note.py
+++ b/openpype/modules/ftrack/plugins/publish/integrate_ftrack_note.py
@@ -9,9 +9,11 @@ Requires:
"""
import sys
+import copy
import six
import pyblish.api
+from openpype.lib import StringTemplate
class IntegrateFtrackNote(pyblish.api.InstancePlugin):
@@ -53,14 +55,10 @@ class IntegrateFtrackNote(pyblish.api.InstancePlugin):
intent = instance.context.data.get("intent")
intent_label = None
- if intent and isinstance(intent, dict):
- intent_val = intent.get("value")
- intent_label = intent.get("label")
- else:
- intent_val = intent
-
- if not intent_label:
- intent_label = intent_val or ""
+ if intent:
+ value = intent["value"]
+ if value:
+ intent_label = intent["label"] or value
# if intent label is set then format comment
# - it is possible that intent_label is equal to "" (empty string)
@@ -96,6 +94,14 @@ class IntegrateFtrackNote(pyblish.api.InstancePlugin):
labels.append(label)
+ base_format_data = {
+ "host_name": host_name,
+ "app_name": app_name,
+ "app_label": app_label,
+ "source": instance.data.get("source", '')
+ }
+ if comment:
+ base_format_data["comment"] = comment
for asset_version_data in asset_versions_data_by_id.values():
asset_version = asset_version_data["asset_version"]
component_items = asset_version_data["component_items"]
@@ -109,23 +115,31 @@ class IntegrateFtrackNote(pyblish.api.InstancePlugin):
template = self.note_template
if template is None:
template = self.note_with_intent_template
- format_data = {
- "intent": intent_label,
- "comment": comment,
- "host_name": host_name,
- "app_name": app_name,
- "app_label": app_label,
- "published_paths": "
".join(sorted(published_paths)),
- "source": instance.data.get("source", '')
- }
- comment = template.format(**format_data)
- if not comment:
+ format_data = copy.deepcopy(base_format_data)
+ format_data["published_paths"] = "
".join(
+ sorted(published_paths)
+ )
+ if intent:
+ if "{intent}" in template:
+ format_data["intent"] = intent_label
+ else:
+ format_data["intent"] = intent
+
+ note_text = StringTemplate.format_template(template, format_data)
+ if not note_text.solved:
+ self.log.warning((
+ "Note template require more keys then can be provided."
+ "\nTemplate: {}\nData: {}"
+ ).format(template, format_data))
+ continue
+
+ if not note_text:
self.log.info((
"Note for AssetVersion {} would be empty. Skipping."
"\nTemplate: {}\nData: {}"
).format(asset_version["id"], template, format_data))
continue
- asset_version.create_note(comment, author=user, labels=labels)
+ asset_version.create_note(note_text, author=user, labels=labels)
try:
session.commit()