diff options
Diffstat (limited to 'database.py')
| -rw-r--r-- | database.py | 70 |
1 files changed, 63 insertions, 7 deletions
diff --git a/database.py b/database.py index f5eea45..89f769f 100644 --- a/database.py +++ b/database.py @@ -6,6 +6,8 @@ import sqlalchemy as db from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship, sessionmaker +BLOCKSIZE = 1024 ** 2 + class Types(object): class ObjectId(db.TypeDecorator): impl = db.UnicodeText @@ -25,7 +27,7 @@ class Types(object): return ";".join(i.replace(";", ",") for i in value) def process_result_value(self, value : str, dialect) -> list: - return value.split(";") + return value.split(";") if value else [] Base = declarative_base() @@ -35,6 +37,13 @@ class User(Base): name = db.Column(db.UnicodeText, nullable=False) email = db.Column(db.UnicodeText) hash = db.Column(db.String(512), nullable=False) + + def json(self): + return { + "id" : self.id, + "name" : self.name, + "email" : self.email + } class Upload(Base): __tablename__ = "uploads" @@ -46,10 +55,23 @@ class Upload(Base): tags = db.Column(Types.List, default=list) created_at = db.Column(db.DateTime, nullable=False, default=datetime.now) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now) + readonly = db.Column(db.Boolean, nullable=True, default=bool) _v = db.Column(db.Integer, default=0) author = relationship("User") - #dependency = relationship("Dependency") + + def json(self): + return { + "id" : self.id, + "title" : self.title, + "author" : self.author.json() if self.author else {"name" : "N/A"}, + "description" : self.description, + "slug" : self.slug, + "tags" : self.tags, + "createdAt" : self.created_at.isoformat(), + "updatedAt" : self.updated_at.isoformat(), + "_v" : self._v + } class File(Base): __tablename__ = "files" @@ -63,6 +85,22 @@ class File(Base): download_url = db.Column(db.Text) upload = relationship("Upload") + + def json(self): + return { + "id" : self.id, + "filename" : self.name, + "metadata" : { + "hashes" : { + "sha1" : self.hash + } + }, + "aliases" : None, + "content-type" : self.content_type, + "length" : self.length, + "chunkSize" : BLOCKSIZE, + "uploadDate" : self.date.isoformat() + } class Comment(Base): __tablename__ = "comments" @@ -75,16 +113,34 @@ class Comment(Base): author = relationship("User") upload = relationship("Upload") + + def json(self): + return { + "id" : self.id, + "body" : self.body, + "author" : self.author.json(), + "upload" : self.upload.id, + "createdAt" : self.created_at.isoformat(), + "updatedAt" : self.updated_at.isoformat() + } -class Voting(Base): - __tablename__ = "votings" +class Vote(Base): + __tablename__ = "votes" id = db.Column(Types.ObjectId, primary_key=True, default=ObjectId) author_id = db.Column(Types.ObjectId, db.ForeignKey("users.id")) - target_id = db.Column(Types.ObjectId, db.ForeignKey("uploads.id")) + upload_id = db.Column(Types.ObjectId, db.ForeignKey("uploads.id")) + impact = db.Column(db.Integer, nullable=False) author = relationship("User") - target = relationship("Upload") - pass + upload = relationship("Upload") + + def json(self): + return { + "id" : self.id, + "author" : self.author.json(), + "upload" : self.upload.id, + "impact" : self.impact + } #class Dependency(Base): #__tablename__ = "dependencies" |
