from contextlib import closing from typing import Iterator from pycs import db from pycs.database.base import NamedBaseModel class Collection(NamedBaseModel): # table columns project_id = db.Column( db.Integer, db.ForeignKey("project.id", ondelete="CASCADE"), nullable=False) reference = db.Column( db.String, nullable=False) description = db.Column( db.String) position = db.Column( db.Integer, nullable=False) autoselect = db.Column( db.Boolean, nullable=False) # contraints __table_args__ = ( db.UniqueConstraint('project_id', 'reference'), ) # relationships to other models files = db.relationship("File", backref="collection", lazy="dynamic") serialize_rules = ('-files',) def count_files(self) -> int: return self.files.count() # def files_it(self, offset: int = 0, limit: int = -1) -> Iterator[File]: # # self.files.filter # files = File.query.filter_by(project_id=self.project_id, collection_id=self.id) # raise NotImplementedError def get_files(self, offset: int = 0, limit: int = -1): """ get an iterator of files associated with this project :param offset: file offset :param limit: file limit :return: iterator of files """ from pycs.database.File import File return self.files.order_by(File.id).offset(offset).limit(limit)