From 39e1fdeee2e2cc44bb54d921a06d3f6dab8c9676 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 7 Sep 2021 10:14:38 +0200 Subject: [PATCH] task model keeps information about asset/task relations --- openpype/tools/new_publisher/control.py | 17 ++++------- .../tools/new_publisher/widgets/widgets.py | 30 +++++++++++++++++-- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/openpype/tools/new_publisher/control.py b/openpype/tools/new_publisher/control.py index e301a6e4ec..1273b12666 100644 --- a/openpype/tools/new_publisher/control.py +++ b/openpype/tools/new_publisher/control.py @@ -439,21 +439,16 @@ class PublisherController: output[parent_id].append(asset_doc) return output - def get_task_names_for_asset_names(self, asset_names): + def get_task_names_by_asset_names(self, asset_names): task_names_by_asset_name = ( self._asset_docs_cache.get_task_names_by_asset_name() ) - tasks = None + result = {} for asset_name in asset_names: - task_names = set(task_names_by_asset_name.get(asset_name, [])) - if tasks is None: - tasks = task_names - else: - tasks &= task_names - - if not tasks: - break - return tasks + result[asset_name] = set( + task_names_by_asset_name.get(asset_name) or [] + ) + return result def _trigger_callbacks(self, callbacks, *args, **kwargs): """Helper method to trigger callbacks stored by their rerence.""" diff --git a/openpype/tools/new_publisher/widgets/widgets.py b/openpype/tools/new_publisher/widgets/widgets.py index a1dc97254b..d616116e45 100644 --- a/openpype/tools/new_publisher/widgets/widgets.py +++ b/openpype/tools/new_publisher/widgets/widgets.py @@ -86,19 +86,45 @@ class TasksModel(QtGui.QStandardItemModel): self._controller = controller self._items_by_name = {} self._asset_names = [] + self._task_names_by_asset_name = {} def set_asset_names(self, asset_names): self._asset_names = asset_names self.reset() + @staticmethod + def get_intersection_of_tasks(task_names_by_asset_name): + tasks = None + for task_names in task_names_by_asset_name.values(): + if tasks is None: + tasks = set(task_names) + else: + tasks &= set(task_names) + + if not tasks: + break + return tasks or set() + + def is_task_name_valid(self, asset_name, task_name): + task_names = self._task_names_by_asset_name.get(asset_name) + if task_names and task_name in task_names: + return True + return False + def reset(self): if not self._asset_names: self._items_by_name = {} + self._task_names_by_asset_name = {} self.clear() return - new_task_names = self._controller.get_task_names_for_asset_names( - self._asset_names + task_names_by_asset_name = ( + self._controller.get_task_names_by_asset_names(self._asset_names) + ) + self._task_names_by_asset_name = task_names_by_asset_name + + new_task_names = self.get_intersection_of_tasks( + task_names_by_asset_name ) old_task_names = set(self._items_by_name.keys()) if new_task_names == old_task_names: