summaryrefslogtreecommitdiff
path: root/cli/app/sql/models/collection.py
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2020-05-30 17:27:04 +0200
committerJules Laplace <julescarbon@gmail.com>2020-05-30 17:27:04 +0200
commit0890fdd951d021308550a0db2e7b6f2593512957 (patch)
treea0050b153242ccde662fc0a957a79fc7a7edc4b4 /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.py58
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