]> git.datanom.net - wpp.git/blobdiff - app/models.py
Base user framework finished
[wpp.git] / app / models.py
diff --git a/app/models.py b/app/models.py
new file mode 100644 (file)
index 0000000..0fee517
--- /dev/null
@@ -0,0 +1,88 @@
+from app import db
+from config import ADMINS
+import enum
+
+class Format(enum.Enum):
+    jpg = 1
+    raw = 2
+    tiff = 3
+
+class Role(enum.Enum):
+    read = 1
+    write = 2
+    admin = 3
+    
+class User(db.Model):
+    __tablename__ = 'user'
+    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
+    name = db.Column(db.String(255))
+    email = db.Column(db.String(255), index=True, unique=True)
+    username = db.Column(db.String(255), index=True, unique=True)
+    password = db.Column(db.String(255))
+    portfolios = db.relationship('Portfolio', backref='owner', lazy=True, cascade='save-update, merge, delete, delete-orphan')
+    acl = db.relationship('AccessRight', backref='user', lazy=True)
+    
+    @property
+    def is_authenticated(self):
+        return True
+
+    @property
+    def is_active(self):
+        return True
+
+    @property
+    def is_anonymous(self):
+        return False
+    
+    @property
+    def is_admin(self):
+        return self.email in ADMINS
+
+    def get_id(self):
+        return str(self.id)  # python 3
+
+    def __repr__(self):
+        return '<User Name: %r Email: %r username: %r>' % (self.name,  self.email,  self.username)
+        
+class Portfolio(db.Model):
+    __tablename__ = 'portfolio'
+    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
+    name = db.Column(db.String(255))
+    user_id = db.Column(db.ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False)
+    albums = db.relationship('Album', backref='portfolio', lazy=True, cascade='save-update, merge, delete, delete-orphan')
+    
+    def __repr__(self):
+        return '<Portfolio Name: %r Owner: %r>' % (self.name,  self.owner)
+
+class Album(db.Model):
+    __tablename__ = 'album'
+    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
+    name = db.Column(db.String(255))
+    photos = db.relationship('Photo', backref='album', lazy=True, cascade='save-update, merge, delete, delete-orphan')
+    portfolio_id = db.Column(db.ForeignKey('portfolio.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False)
+
+    def __repr__(self):
+        return '<Album Name: %r Portfolio: %r>' % (self.name,  self.portfolio)
+
+class Photo(db.Model):
+    __tablename__ = 'photo'
+    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
+    file = db.Column(db.String(255))
+    name = db.Column(db.String(255))
+    exif = db.Column(db.Text)
+    format = db.Column(db.Enum(Format))
+    sibling = db.Column(db.ForeignKey('photo.id'))
+    album_id = db.Column(db.ForeignKey('album.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False)
+
+    def __repr__(self):
+        return '<Photo Name: %r File: %r Format: %r Album: %r>' % (self.name,  self.file,  self.format,  self.album)
+
+class AccessRight(db.Model):
+    __tablename__ = 'accessright'
+    id = db.Column(db.Integer, primary_key = True, autoincrement=True)
+    right = db.Column(db.Enum(Role))
+    user_id = db.Column(db.ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False)
+    object = db.Column(db.Integer)
+
+    def __repr__(self):
+        return '<AccessRight Right: %r User: %r Object: %r>' % (self.right,  self.user,  self.object)
This page took 0.031117 seconds and 5 git commands to generate.