class Text(Field): __tablename__ = 'text' id = Column(db.ForeignKey("field.id"), primary_key=True) value = Column(db.String(200)) __mapper_args__ = {"polymorphic_identity": "text"}
class Number(Field): __tablename__ = 'number' id = Column(db.ForeignKey("field.id"), primary_key=True) value = Column(db.Numeric()) __mapper_args__ = {"polymorphic_identity": "number"}
class Color(Field): __tablename__ = 'color' id = Column(db.ForeignKey('field.id'), primary_key=True) color_code = Column(db.String(10)) __mapper_args__ = {"polymorphic_identity": "color"}
class Select(Field): __tablename__ = 'select' id = Column(db.ForeignKey("field.id"), primary_key=True) selected_value = Column(db.String) possible_values = Column(db.JSON) __mapper_args__ = {"polymorphic_identity": "select"}
class Link(Field): __tablename__ = 'link' id = Column(db.ForeignKey('field.id'), primary_key=True) linked_space_id = reference_col('space', nullable=False) linked_space = relationship( 'Space', backref=db.backref('link', uselist=False)) __mapper_args__ = {"polymorphic_identity": "link"}
class Audio(Field): __tablename__ = 'audio' id = Column(db.ForeignKey("field.id"), primary_key=True) file_id = reference_col('file', nullable=True) file = relationship("File", backref=db.backref("audio", uselist=False)) duration = Column(db.Integer) audio_format = Column(db.String(50)) __mapper_args__ = {"polymorphic_identity": "audio"}
class Position(Field): __tablename__ = 'position' id = db.Column(db.ForeignKey("field.id"), primary_key=True) x = Column(db.Numeric(), default=0) y = Column(db.Numeric(), default=0) z = Column(db.Numeric(), default=0) w = Column(db.Numeric(), default=1) __mapper_args__ = {"polymorphic_identity": "position"}
class Image(Field): __tablename__ = 'image' id = Column(db.ForeignKey("field.id"), primary_key=True) file_id = reference_col('file', nullable=True) file = relationship("File", backref=db.backref("image", uselist=False)) width = Column(db.Integer) height = Column(db.Integer) __mapper_args__ = {"polymorphic_identity": "image"}
class Object(Field): __tablename__ = 'object' id = Column(db.ForeignKey('field.id'), primary_key=True) folder = Column(db.String(512)) object_filename = Column(db.String(100)) thumbnail = Column(db.String(100)) attribute = Column(db.String(200)) __mapper_args__ = {"polymorphic_identity": "object"}
from flask_jwt_extended import current_user from remixvr.database import (Model, SurrogatePK, db, reference_col, relationship) followers_assoc = db.Table( "followers_assoc", db.Column("follower", db.Integer, db.ForeignKey("userprofile.user_id")), db.Column("followed_by", db.Integer, db.ForeignKey("userprofile.user_id"))) class UserProfile(Model, SurrogatePK): __tablename__ = 'userprofile' # id is needed for primary join, it does work with SurrogatePK class id = db.Column(db.Integer, primary_key=True) user_id = reference_col('users', nullable=False, unique=True) user = relationship('User', backref=db.backref('profile', uselist=False)) follows = relationship('UserProfile', secondary=followers_assoc, primaryjoin=id == followers_assoc.c.follower, secondaryjoin=id == followers_assoc.c.followed_by, backref='followed_by', lazy='dynamic') def __init__(self, user, **kwargs): db.Model.__init__(self, user=user, **kwargs) def is_following(self, profile): return bool(
"""Project models.""" import datetime as dt import uuid from flask_jwt_extended import current_user from slugify import slugify from remixvr.database import (Model, SurrogatePK, relationship, reference_col, Column, db) from remixvr.profile.models import UserProfile favoriter_assoc = db.Table( "favoritor_assoc", db.Column("favoriter", db.Integer, db.ForeignKey("userprofile.id")), db.Column("favorited_project", db.Integer, db.ForeignKey("project.id"))) tag_assoc = db.Table( "tag_assoc", db.Column("tag", db.Integer, db.ForeignKey("tags.id")), db.Column("project", db.Integer, db.ForeignKey("project.id"))) class Tags(Model): __tablename__ = 'tags' id = db.Column(db.Integer, primary_key=True) tagname = db.Column(db.String(100)) def __init__(self, tagname): db.Model.__init__(self, tagname=tagname)