diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2020-05-30 17:27:04 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2020-05-30 17:27:04 +0200 |
| commit | 0890fdd951d021308550a0db2e7b6f2593512957 (patch) | |
| tree | a0050b153242ccde662fc0a957a79fc7a7edc4b4 /cli/app/sql/models/collection.py | |
initial site copied in
Diffstat (limited to 'cli/app/sql/models/collection.py')
| -rw-r--r-- | cli/app/sql/models/collection.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/cli/app/sql/models/collection.py b/cli/app/sql/models/collection.py new file mode 100644 index 0000000..0bc808c --- /dev/null +++ b/cli/app/sql/models/collection.py @@ -0,0 +1,58 @@ +from sqlalchemy import create_engine, Table, Column, String, Integer, Boolean, DateTime, Text +from sqlalchemy.orm import relationship +from sqlalchemy_utc import UtcDateTime, utcnow +import sqlalchemy.sql.functions as func +from wtforms_alchemy import ModelForm + +from app.sql.common import Base, Session +from app.sql.models.collection_media import CollectionMedia + +class Collection(Base): + """Table for storing references to various media""" + __tablename__ = 'collection' + id = Column(Integer, primary_key=True) + title = Column(String(64, convert_unicode=True), nullable=False) + username = Column(String(16, convert_unicode=True), nullable=False) + notes = Column(Text) + archived = Column(Boolean, default=False) + created_at = Column(UtcDateTime(), default=utcnow()) + updated_at = Column(UtcDateTime(), onupdate=utcnow()) + + medias = relationship("Media", secondary="collection_media", lazy='dynamic') + + def toJSON(self): + return { + 'id': self.id, + 'title': self.title, + 'username': self.username, + 'notes': self.notes, + 'archived': self.archived, + 'created_at': self.created_at, + 'updated_at': self.updated_at, + 'media': [media.toJSON() for media in self.medias.limit(7)], + } + + def toFullJSON(self): + return { + 'id': self.id, + 'title': self.title, + 'username': self.username, + 'notes': self.notes, + 'archived': self.archived, + 'created_at': self.created_at, + 'updated_at': self.updated_at, + 'media': [media.toJSON() for media in self.medias], + } + +def getMediaCounts(session): + return session.query( + CollectionMedia.collection_id, + func.count(CollectionMedia.media_id) + ).group_by(CollectionMedia.collection_id).all() + +class CollectionForm(ModelForm): + class Meta: + model = Collection + exclude = ['created_at', 'updated_at'] + def get_session(): + return Session()
\ No newline at end of file |
