123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- from typing import List
- from pycs.database.Database import Database
- 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, db: Database, project_id: int, notifications: NotificationList = None):
- self.__db = db
- self.__project_id = project_id
- self.__notifications = notifications
- self.__project = self.__db.project(self.__project_id)
- self.__collections = self.__project.collections()
- def labels(self) -> List[MediaLabel]:
- """
- receive a list of labels
- :return: list of labels
- """
- label_list = self.__project.labels()
- label_dict = {la.identifier: MediaLabel(la) for la in label_list}
- result = []
- for label in label_list:
- medial_label = label_dict[label.identifier]
- 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 list(filter(
- lambda ml: ml.parent is None,
- self.labels()
- ))
- def files(self) -> MediaFileList:
- """
- get a FileList object to filter and receive MediaFile elements
- :return: FileList
- """
- return MediaFileList(self.__project, self.__notifications)
|