123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- from typing import List
- from pycs.database.Project import Project
- from pycs.frontend.notifications.NotificationList import NotificationList
- from pycs.interfaces.MediaFileList import MediaFileList
- from pycs.interfaces.MediaLabel import MediaLabel
- class MediaStorage:
- """
- helper class for pipelines to interact with database entities
- """
- def __init__(self, project_id: int, notifications: NotificationList = None):
- self.__project_id = project_id
- self.__notifications = notifications
- self.__project = Project.query.get(self.__project_id)
- # this one is not used anywhere
- # self.__collections = self.__project.collections.all()
- def labels(self) -> List[MediaLabel]:
- """
- receive a list of labels
- :return: list of labels
- """
- label_list = self.__project.labels.all()
- label_dict = {la.id: MediaLabel(la) for la in label_list}
- result = []
- for label in label_list:
- medial_label = label_dict[label.id]
- if label.parent_id is not None:
- medial_label.parent = label_dict[label.parent_id]
- medial_label.parent.children.append(medial_label)
- result.append(medial_label)
- return result
- def labels_tree(self) -> List[MediaLabel]:
- """
- receive a tree of labels
- :return: list of root-level labels (parent is None)
- """
- return [label for label in self.labels() if label.parent is None]
- def files(self) -> MediaFileList:
- """
- get a FileList object to filter and receive MediaFile elements
- :return: FileList
- """
- return MediaFileList(self.__project, self.__notifications)
|