mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
Publisher: Refactor Report Maker plugin data storage to be a dict by plugin.id (#5668)
* Refactor plugin data storage to be a dict by plugin.id + Fix `_current_plugin_data` type on `__init__` * Avoid plural when the plugin is singular * Refactor `_plugin_data_by_plugin_id` to `_plugin_data_by_id`
This commit is contained in:
parent
3328ba321d
commit
7206757c13
1 changed files with 26 additions and 30 deletions
|
|
@ -176,11 +176,10 @@ class PublishReportMaker:
|
|||
self._create_discover_result = None
|
||||
self._convert_discover_result = None
|
||||
self._publish_discover_result = None
|
||||
self._plugin_data = []
|
||||
self._plugin_data_with_plugin = []
|
||||
|
||||
self._stored_plugins = set()
|
||||
self._current_plugin_data = []
|
||||
self._plugin_data_by_id = {}
|
||||
self._current_plugin = None
|
||||
self._current_plugin_data = {}
|
||||
self._all_instances_by_id = {}
|
||||
self._current_context = None
|
||||
|
||||
|
|
@ -192,9 +191,9 @@ class PublishReportMaker:
|
|||
create_context.convertor_discover_result
|
||||
)
|
||||
self._publish_discover_result = create_context.publish_discover_result
|
||||
self._plugin_data = []
|
||||
self._plugin_data_with_plugin = []
|
||||
self._stored_plugins = set()
|
||||
|
||||
self._plugin_data_by_id = {}
|
||||
self._current_plugin = None
|
||||
self._current_plugin_data = {}
|
||||
self._all_instances_by_id = {}
|
||||
self._current_context = context
|
||||
|
|
@ -211,18 +210,11 @@ class PublishReportMaker:
|
|||
if self._current_plugin_data:
|
||||
self._current_plugin_data["passed"] = True
|
||||
|
||||
self._current_plugin = plugin
|
||||
self._current_plugin_data = self._add_plugin_data_item(plugin)
|
||||
|
||||
def _get_plugin_data_item(self, plugin):
|
||||
store_item = None
|
||||
for item in self._plugin_data_with_plugin:
|
||||
if item["plugin"] is plugin:
|
||||
store_item = item["data"]
|
||||
break
|
||||
return store_item
|
||||
|
||||
def _add_plugin_data_item(self, plugin):
|
||||
if plugin in self._stored_plugins:
|
||||
if plugin.id in self._plugin_data_by_id:
|
||||
# A plugin would be processed more than once. What can cause it:
|
||||
# - there is a bug in controller
|
||||
# - plugin class is imported into multiple files
|
||||
|
|
@ -230,15 +222,9 @@ class PublishReportMaker:
|
|||
raise ValueError(
|
||||
"Plugin '{}' is already stored".format(str(plugin)))
|
||||
|
||||
self._stored_plugins.add(plugin)
|
||||
|
||||
plugin_data_item = self._create_plugin_data_item(plugin)
|
||||
self._plugin_data_by_id[plugin.id] = plugin_data_item
|
||||
|
||||
self._plugin_data_with_plugin.append({
|
||||
"plugin": plugin,
|
||||
"data": plugin_data_item
|
||||
})
|
||||
self._plugin_data.append(plugin_data_item)
|
||||
return plugin_data_item
|
||||
|
||||
def _create_plugin_data_item(self, plugin):
|
||||
|
|
@ -279,7 +265,7 @@ class PublishReportMaker:
|
|||
"""Add result of single action."""
|
||||
plugin = result["plugin"]
|
||||
|
||||
store_item = self._get_plugin_data_item(plugin)
|
||||
store_item = self._plugin_data_by_id.get(plugin.id)
|
||||
if store_item is None:
|
||||
store_item = self._add_plugin_data_item(plugin)
|
||||
|
||||
|
|
@ -301,14 +287,24 @@ class PublishReportMaker:
|
|||
instance, instance in self._current_context
|
||||
)
|
||||
|
||||
plugins_data = copy.deepcopy(self._plugin_data)
|
||||
if plugins_data and not plugins_data[-1]["passed"]:
|
||||
plugins_data[-1]["passed"] = True
|
||||
plugins_data_by_id = copy.deepcopy(
|
||||
self._plugin_data_by_id
|
||||
)
|
||||
|
||||
# Ensure the current plug-in is marked as `passed` in the result
|
||||
# so that it shows on reports for paused publishes
|
||||
if self._current_plugin is not None:
|
||||
current_plugin_data = plugins_data_by_id.get(
|
||||
self._current_plugin.id
|
||||
)
|
||||
if current_plugin_data and not current_plugin_data["passed"]:
|
||||
current_plugin_data["passed"] = True
|
||||
|
||||
if publish_plugins:
|
||||
for plugin in publish_plugins:
|
||||
if plugin not in self._stored_plugins:
|
||||
plugins_data.append(self._create_plugin_data_item(plugin))
|
||||
if plugin.id not in plugins_data_by_id:
|
||||
plugins_data_by_id[plugin.id] = \
|
||||
self._create_plugin_data_item(plugin)
|
||||
|
||||
reports = []
|
||||
if self._create_discover_result is not None:
|
||||
|
|
@ -329,7 +325,7 @@ class PublishReportMaker:
|
|||
)
|
||||
|
||||
return {
|
||||
"plugins_data": plugins_data,
|
||||
"plugins_data": list(plugins_data_by_id.values()),
|
||||
"instances": instances_details,
|
||||
"context": self._extract_context_data(self._current_context),
|
||||
"crashed_file_paths": crashed_file_paths,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue