task model keeps information about asset/task relations

This commit is contained in:
iLLiCiTiT 2021-09-07 10:14:38 +02:00
parent 43654be4f8
commit 39e1fdeee2
2 changed files with 34 additions and 13 deletions

View file

@ -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."""

View file

@ -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: