class SimilaritiesModel(db.Model): __tablename__ = 'similarities' __table_args__ = (db.PrimaryKeyConstraint('id_1', 'id_2'), ) id_1 = db.Column(db.VARCHAR(255), primary_key=True) id_2 = db.Column(db.VARCHAR(255), primary_key=True) jaccard = db.Column(db.FLOAT) dice = db.Column(db.FLOAT) cosine = db.Column(db.FLOAT) wmd = db.Column(db.FLOAT) duplicated = db.Column(db.BOOLEAN) def json(self): return { 'id_1': self.parse_id(self.id_1), 'id_2': self.parse_id(self.id_2), 'jaccard': self.jaccard, 'dice': self.dice, 'consine': self.cosine, 'wmd': self.wmd, 'duplicated': self.duplicated } @staticmethod def filter(min_cosine, max_cosine, duplicated, user): # the user has already given his feedback on these pairs of trials existing_pairs = [ x.json() for x in db.session.query(FeedbackModel).filter( FeedbackModel.creator == user).all() ] all_pairs = [ x.json() for x in db.session.query(SimilaritiesModel).filter( SimilaritiesModel.cosine >= min_cosine). filter(SimilaritiesModel.cosine <= max_cosine).filter( SimilaritiesModel.duplicated == duplicated).limit(100).all() ] new_pairs = [] for p in all_pairs: is_valid = True for ep in existing_pairs: if p['id_1'] == ep['id_1'] and p['id_2'] == ep['id_2']: is_valid = False break if is_valid: new_pairs.append(p) return new_pairs def parse_id(self, id_val): if 'CTRI' in id_val: return id_val.replace('-', '/') elif 'Outside-EU-EEA' in id_val: return id_val.replace('Outside-EU-EEA', 'Outside-EU/EEA') else: return id_val
MovieJSON = Dict[str, Union[int, str, List[str]]] """ Create an association table for the many-to-many relation between movies and actors """ movies_actors = db.Table( "movies_actors", db.Column("movie_id", db.Integer, db.ForeignKey("movies.id"), nullable=False), db.Column("actor_id", db.Integer, db.ForeignKey("actors.id"), nullable=False), db.PrimaryKeyConstraint("movie_id", "actor_id"), ) class MovieModel(db.Model, ModelMixin): """SQLAlchemy model for movies""" __tablename__ = "movies" id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(50), nullable=False) release_date = db.Column(db.Date, nullable=False) actors = db.relationship( ActorModel, secondary="movies_actors", lazy=True,
from db import db from models.member import MemberModel from models.model_mixin import ModelMixin projects_members = db.Table( "projects_members", db.Column("project_id", db.Integer, db.ForeignKey("projects.id"), nullable=False), db.Column("member_id", db.Integer, db.ForeignKey("members.id"), nullable=False), db.PrimaryKeyConstraint("project_id", "member_id"), ) class ProjectModel(db.Model, ModelMixin): __tablename__ = "projects" id = db.Column(db.Integer, primary_key=True) start_date = db.Column(db.Date, nullable=False) end_date = db.Column(db.Date) title = db.Column(db.String(100), unique=True, nullable=False) description = db.Column(db.String(500), nullable=False) goals = db.Column(db.String(500), nullable=False) status = db.Column(db.String(50), nullable=False) admin_id = db.Column(db.Integer, db.ForeignKey("members.id"),
from models.member import MemberModel from models.model_mixin import ModelMixin meetings_members = db.Table( "meetings_members", db.Column("meeting_id", db.Integer, db.ForeignKey("meetings.id"), nullable=False), db.Column("member_id", db.Integer, db.ForeignKey("members.id"), nullable=False), db.Column("will_attend", db.Boolean), db.Column("attended", db.Boolean), db.PrimaryKeyConstraint("meeting_id", "member_id"), ) class MeetingModel(db.Model, ModelMixin): __tablename__ = "meetings" id = db.Column(db.Integer, primary_key=True) datetime = db.Column(db.DateTime, nullable=False) type = db.Column(db.String(20), nullable=False) location = db.Column(db.String(100), nullable=False) description = db.Column(db.String(500), nullable=False) creator_id = db.Column(db.Integer, db.ForeignKey("members.id"), nullable=False) creator = db.relationship("MemberModel")
from db import db from models.model_mixin import ModelMixin from models.permission import PermissionModel roles_permissions = db.Table( "roles_permissions", db.Column("role_id", db.Integer, db.ForeignKey("roles.id"), nullable=False), db.Column( "permission_id", db.Integer, db.ForeignKey("permissions.id"), nullable=False, ), db.PrimaryKeyConstraint("role_id", "permission_id"), ) class RoleModel(db.Model, ModelMixin): __tablename__ = "roles" id = db.Column(db.Integer, primary_key=True) role_name = db.Column(db.String(20), unique=True, nullable=False) permissions = db.relationship( "PermissionModel", secondary="roles_permissions", lazy="dynamic", backref=db.backref("roles", lazy="dynamic"), )