diff --git a/openpype/hosts/traypublisher/plugins/publish/collect_simple_instances.py b/openpype/hosts/traypublisher/plugins/publish/collect_simple_instances.py
index bbd0221c88..f76306cf05 100644
--- a/openpype/hosts/traypublisher/plugins/publish/collect_simple_instances.py
+++ b/openpype/hosts/traypublisher/plugins/publish/collect_simple_instances.py
@@ -55,6 +55,8 @@ class CollectSettingsSimpleInstances(pyblish.api.InstancePlugin):
"files": filenames
})
+ instance.data["source"] = "\n".join(filepaths)
+
self.log.debug("Created Simple Settings instance {}".format(
instance.data
))
diff --git a/openpype/modules/ftrack/plugins/publish/integrate_ftrack_note.py b/openpype/modules/ftrack/plugins/publish/integrate_ftrack_note.py
index 952b21546d..77a7ebdfcf 100644
--- a/openpype/modules/ftrack/plugins/publish/integrate_ftrack_note.py
+++ b/openpype/modules/ftrack/plugins/publish/integrate_ftrack_note.py
@@ -116,6 +116,7 @@ class IntegrateFtrackNote(pyblish.api.InstancePlugin):
"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:
diff --git a/openpype/pipeline/create/context.py b/openpype/pipeline/create/context.py
index a7a8eba383..9b55c3b21e 100644
--- a/openpype/pipeline/create/context.py
+++ b/openpype/pipeline/create/context.py
@@ -736,6 +736,7 @@ class CreateContext:
self.manual_creators = {}
self.publish_discover_result = None
+ self.publish_plugins_mismatch_targets = []
self.publish_plugins = []
self.plugins_with_defs = []
self._attr_plugins_by_family = {}
@@ -858,6 +859,7 @@ class CreateContext:
discover_result = DiscoverResult()
plugins_with_defs = []
plugins_by_targets = []
+ plugins_mismatch_targets = []
if discover_publish_plugins:
discover_result = publish_plugins_discover()
publish_plugins = discover_result.plugins
@@ -867,11 +869,19 @@ class CreateContext:
plugins_by_targets = pyblish.logic.plugins_by_targets(
publish_plugins, list(targets)
)
+
# Collect plugins that can have attribute definitions
for plugin in publish_plugins:
if OpenPypePyblishPluginMixin in inspect.getmro(plugin):
plugins_with_defs.append(plugin)
+ plugins_mismatch_targets = [
+ plugin
+ for plugin in publish_plugins
+ if plugin not in plugins_by_targets
+ ]
+
+ self.publish_plugins_mismatch_targets = plugins_mismatch_targets
self.publish_discover_result = discover_result
self.publish_plugins = plugins_by_targets
self.plugins_with_defs = plugins_with_defs
diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_ftrack.json b/openpype/settings/entities/schemas/projects_schema/schema_project_ftrack.json
index f8f9d5093d..c0069dcdab 100644
--- a/openpype/settings/entities/schemas/projects_schema/schema_project_ftrack.json
+++ b/openpype/settings/entities/schemas/projects_schema/schema_project_ftrack.json
@@ -822,7 +822,7 @@
},
{
"type": "label",
- "label": "Template may contain formatting keys intent, comment, host_name, app_name, app_label and published_paths."
+ "label": "Template may contain formatting keys intent, comment, host_name, app_name, app_label, published_paths and source."
},
{
"type": "text",
diff --git a/openpype/tools/publisher/control.py b/openpype/tools/publisher/control.py
index 915fb7f32e..f692bb4000 100644
--- a/openpype/tools/publisher/control.py
+++ b/openpype/tools/publisher/control.py
@@ -154,15 +154,20 @@ class PublishReport:
self._all_instances_by_id = {}
self._current_context = None
- def reset(self, context, publish_discover_result=None):
+ def reset(self, context, create_context):
"""Reset report and clear all data."""
- self._publish_discover_result = publish_discover_result
+
+ self._publish_discover_result = create_context.publish_discover_result
self._plugin_data = []
self._plugin_data_with_plugin = []
self._current_plugin_data = {}
self._all_instances_by_id = {}
self._current_context = context
+ for plugin in create_context.publish_plugins_mismatch_targets:
+ plugin_data = self._add_plugin_data_item(plugin)
+ plugin_data["skipped"] = True
+
def add_plugin_iter(self, plugin, context):
"""Add report about single iteration of plugin."""
for instance in context:
@@ -205,6 +210,7 @@ class PublishReport:
"name": plugin.__name__,
"label": label,
"order": plugin.order,
+ "targets": list(plugin.targets),
"instances_data": [],
"actions_data": [],
"skipped": False,
@@ -777,10 +783,7 @@ class PublisherController:
# - pop the key after first collector using it would be safest option?
self._publish_context.data["create_context"] = self.create_context
- self._publish_report.reset(
- self._publish_context,
- self.create_context.publish_discover_result
- )
+ self._publish_report.reset(self._publish_context, self.create_context)
self._publish_validation_errors = []
self._publish_current_plugin_validation_errors = None
self._publish_error = None
diff --git a/openpype/tools/publisher/publish_report_viewer/report_items.py b/openpype/tools/publisher/publish_report_viewer/report_items.py
index b47d14da25..8a01569723 100644
--- a/openpype/tools/publisher/publish_report_viewer/report_items.py
+++ b/openpype/tools/publisher/publish_report_viewer/report_items.py
@@ -83,10 +83,8 @@ class PublishReport:
logs = []
plugins_items_by_id = {}
- plugins_id_order = []
for plugin_data in data["plugins_data"]:
item = PluginItem(plugin_data)
- plugins_id_order.append(item.id)
plugins_items_by_id[item.id] = item
for instance_data_item in plugin_data["instances_data"]:
instance_id = instance_data_item["id"]
@@ -95,6 +93,14 @@ class PublishReport:
copy.deepcopy(log_item_data), item.id, instance_id
)
logs.append(log_item)
+ sorted_plugins = sorted(
+ plugins_items_by_id.values(),
+ key=lambda item: item.order
+ )
+ plugins_id_order = [
+ plugin_item.id
+ for plugin_item in sorted_plugins
+ ]
logs_by_instance_id = collections.defaultdict(list)
for log_item in logs: