class CourseSections(db.Model): __tablename__ = 'course_sections' id = db.Column(db.Integer, primary_key=True) code = db.Column(db.String(20)) name = db.Column(db.String(50)) course_id = db.Column(db.Integer, db.ForeignKey('courses.id')) teacher_id = db.Column(db.Integer, db.ForeignKey('users.id')) course_section_period = db.Column(db.String(6)) section_times = db.relationship("SectionTimes", backref='course_section', lazy='dynamic') __table_args__ = (db.UniqueConstraint('course_id', 'teacher_id', 'course_section_period', 'code', name='course_section_period_uc'), ) def __str__(self): return str('{0} - {1}').format( str(Courses.query.get(self.course_id).code), str(self.course_section_period)) def set_fields(self, fields): self.code = fields['code'] self.name = fields['name'] self.course_id = fields['course_id'] self.teacher_id = fields['teacher_id'] self.course_section_period = fields['course_section_period']
class LabelValue(db.Model): __tablename__ = "label_value" id = db.Column("id", db.Integer(), primary_key=True) label_id = db.Column( "label_id", db.Integer(), db.ForeignKey("label.id"), nullable=False ) value = db.Column("value", db.String(200), nullable=False) created_at = db.Column( "created_at", db.DateTime(), nullable=False, default=db.func.now() ) last_modified = db.Column( "last_modified", db.DateTime(), nullable=False, default=db.func.now(), onupdate=db.func.utc_timestamp(), ) __table_args__ = ( db.UniqueConstraint("label_id", "value", name="_label_id_value_uc"), ) label = db.relationship("Label", backref="LabelValue") segmentations = db.relationship( "Segmentation", secondary=annotation_table, back_populates="values" ) def set_label_value(self, value): self.value = value
class Nicety(db.Model): __tablename__ = 'nicety' id = db.Column(db.Integer, primary_key=True) end_date = db.Column(db.Date) author_id = db.Column(db.ForeignKey('user.id')) # RC user ID target_id = db.Column(db.Integer) # RC user ID anonymous = db.Column(db.Boolean) faculty_reviewed = db.Column(db.Boolean) starred = db.Column(db.Boolean) text = db.Column(db.Text, nullable=True) no_read = db.Column(db.Boolean) date_updated = db.Column(db.Text) batch_author_target_unique = db.UniqueConstraint('batch', 'author', 'target') def __init__(self, end_date, author_id, target_id, **kwargs): self.end_date = end_date self.author_id = author_id self.target_id = target_id self.anonymous = kwargs.get("anonymous", False) self.faculty_reviewed = kwargs.get("faculty_reviewed", False) self.starred = kwargs.get("starred", False) self.text = kwargs.get("text", None) self.no_read = kwargs.get("no_read", False) self.date_updated = kwargs.get("date_updated", "") def __repr__(self): return '<Nicety:{}>'.format(self.id)
class SavedPassword(db.Model): id = db.Column(db.Integer, unique=True, primary_key=True) saved_password = db.Column(db.String(128), nullable=False) domain = db.Column(db.String(1024), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey(User.id)) user = db.relationship(User, foreign_keys=[user_id]) __table_args__ = (db.UniqueConstraint('domain', 'user_id'), ) @staticmethod def create(email: str, domain: str, password: str) -> 'User': """Create a new user.""" user_id = User.find_user_by_email(email).id saved_password_row = SavedPassword( user_id=user_id, domain=domain, ) saved_password_row.password = password try: db.session.add(saved_password_row) db.session.commit() except sqlalchemy.exc.IntegrityError as e: db.session.rollback() existing_password = SavedPassword.get(email, domain) db.session.delete(existing_password) db.session.commit() db.session.add(saved_password_row) db.session.commit() return saved_password_row # .__dict__ ? @property def password(self): return fernet.decrypt(self.saved_password).decode('utf-8') @password.setter def password(self, new_password): self.saved_password = fernet.encrypt(new_password.encode('utf-8')) @staticmethod def get_password(email: str, domain: str) -> 'User': return SavedPassword.get(email, domain).password @staticmethod def get(email: str, domain: str) -> 'User': user = User.query.filter_by(email=email).first() saved_password_row = SavedPassword.query.filter_by( user_id=user.id, domain=domain).first() return saved_password_row def __repr__(self): return f"PasswordEntity('{self.user_id, self.saved_password, self.domain}')"
class UserTypeDestinationsUserType(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) user_type_id = db.Column(db.Integer, db.ForeignKey('user_type.id'), nullable=False) user_type_destination_id = db.Column( db.Integer, db.ForeignKey('user_type_destinations.id'), nullable=False) user_type = db.relationship("UserType") __table_args__ = (db.UniqueConstraint( 'user_type_id', 'user_type_destination_id', name='user_type_destinations_user_type_uc'), ) def set_fields(self, fields): self.user_type_id = fields['user_type_id'] self.user_type_destination_id = fields['user_type_destination_id']
class Label(db.Model): __tablename__ = "label" id = db.Column("id", db.Integer(), primary_key=True) name = db.Column("name", db.String(32), nullable=False) project_id = db.Column("project_id", db.Integer(), db.ForeignKey("project.id"), nullable=False) type_id = db.Column("type_id", db.Integer(), db.ForeignKey("label_type.id"), nullable=False) created_at = db.Column("created_at", db.DateTime(), nullable=False, default=db.func.now()) last_modified = db.Column( "last_modified", db.DateTime(), nullable=False, default=db.func.now(), onupdate=db.func.utc_timestamp(), ) label_type = db.relationship("LabelType", backref="Label") label_values = db.relationship("LabelValue", backref="Label") __table_args__ = (db.UniqueConstraint("name", "project_id", name="_name_project_id_uc"), ) def set_label_type(self, label_type_id): self.type_id = label_type_id
class CourseSectionStudents(db.Model): id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True) course_section_id = db.Column(db.Integer, db.ForeignKey('course_sections.id'), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) course_section = db.relationship("CourseSections") status = db.Column(db.Integer, db.ForeignKey('course_section_students_status.id'), nullable=False) grade = db.Column(db.Float, nullable=True) __table_args__ = (db.UniqueConstraint('course_section_id', 'user_id', name='course_section_user_uc'), ) manager = manager.Manager() def set_fields(self, fields): self.course_section_id = fields['course_section_id'] self.user_id = fields['user_id'] self.status = fields['status'] self.grade = fields['grade']
) from backend.models.postgis.user import User from backend.models.postgis.campaign import Campaign, campaign_organisations from backend.models.postgis.utils import NotFound from backend.models.postgis.statuses import OrganisationType # Secondary table defining many-to-many relationship between organisations and managers organisation_managers = db.Table( "organisation_managers", db.metadata, db.Column( "organisation_id", db.Integer, db.ForeignKey("organisations.id"), nullable=False ), db.Column("user_id", db.BigInteger, db.ForeignKey("users.id"), nullable=False), db.UniqueConstraint("organisation_id", "user_id", name="organisation_user_key"), ) class InvalidRoleException(Exception): pass class Organisation(db.Model): """ Describes an Organisation """ __tablename__ = "organisations" # Columns id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(512), nullable=False, unique=True)
campaign_projects = db.Table( "campaign_projects", db.metadata, db.Column("campaign_id", db.Integer, db.ForeignKey("campaigns.id")), db.Column("project_id", db.Integer, db.ForeignKey("projects.id")), ) campaign_organisations = db.Table( "campaign_organisations", db.metadata, db.Column("campaign_id", db.Integer, db.ForeignKey("campaigns.id")), db.Column("organisation_id", db.Integer, db.ForeignKey("organisations.id")), db.UniqueConstraint("campaign_id", "organisation_id", name="campaign_organisation_key"), ) class Campaign(db.Model): """ Describes an Campaign""" __tablename__ = "campaigns" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String, nullable=False) logo = db.Column(db.String) url = db.Column(db.String) description = db.Column(db.String)