示例#1
0
class Course(db.Model):  # course model
    course_id = db.Column(db.Integer(), primary_key=True)  # identifier
    course_name = db.Column(db.String(50), nullable=False)  # full name
    course_shortened = db.Column(db.String(10), nullable=False)  # shortened name (will be used in file paths)
    course_tutor = db.Column(db.Integer(), db.ForeignKey('user.id'), index=True)  # connecting to tutor
    labs_amount = db.Column(db.Integer(), nullable=False)   # amount of reports
    lab_max_score = db.Column(db.Integer(), nullable=False)  # max score for one lab
    course_tutor_obj = db.relationship("User")

    def __repr__(self):
        return '{} - {}'.format(self.course_name, self.course_shortened)
示例#2
0
class File(db.Model):

    class Type(object):
        snapshot = 1

    file_id = db.Column(db.Integer(), primary_key=True)
    owner_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    bucket = db.Column(db.String(32), nullable=False)
    key = db.Column(db.String(64), nullable=False, default=lambda: token_hex(32))
    file_name = db.Column(db.String(64), nullable=False)
    file_type = db.Column(db.SmallInteger(), nullable=False)
示例#3
0
class Report(db.Model):
    report_id = db.Column(db.Integer(), primary_key=True)  # identifier
    report_course = db.Column(db.Integer(), db.ForeignKey('course.course_id'), index=True)  # course
    report_student = db.Column(db.Integer(), db.ForeignKey('user.id'), index=True)  # report owner
    report_num = db.Column(db.Integer(), nullable=False)
    report_mark = db.Column(db.Integer())   # mark for report
    report_uploaded = db.Column(db.DateTime(), nullable=False)   # upload time
    report_checked = db.Column(db.DateTime())  # check time
    report_stu_comment = db.Column(db.Text())  # comment of student
    report_tut_comment = db.Column(db.Text())  # comment of tutor
    report_hash = db.Column(db.String(32), nullable=False)   # checksum
    student_obj = db.relationship("User")

    def __repr__(self):
        return "Report id:{} course {} №{}".format(self.report_id,
                                         self.report_course,
                                         self.report_num,)
示例#4
0
class Group(db.Model):
    group_id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(10), unique=True, nullable=False)
    students = db.relationship('User',
                               secondary=groups,
                               lazy='subquery',
                               backref='group')
    courses = db.relationship('Course',
                              secondary=courses,
                              lazy='subquery',
                              backref='groups')

    def __repr__(self):
        """needed for correct caching"""
        return self.__class__.__name__ + self.name
示例#5
0
class User(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(40), unique=True, nullable=False)
    name = db.Column(db.String(50), nullable=False)
    active = db.Column(db.Boolean(), default=True)
    _password = db.Column('password', db.String(100))
    role = db.Column(db.ForeignKey('role.role_id'))
    reports = db.relationship("Report")
    role_obj = db.relationship("Role")
    courses = db.relationship("Course")

    def get_id(self):
        return str(self.id)

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def is_authenticated(self):
        return True

    def check_password(self, password: str) ->bool:
        return sha256(password.encode()).hexdigest() == self._password

    def set_password(self, password: str) ->None:
        """
        doesn't commit changes to database, needs db.session.commit() after calling
        :param password: password string 
        :return: None
        """
        self._password = sha256(password.encode()).hexdigest()

    def __repr__(self):
        return self.name

    @property
    def password(self):
        return self._password
示例#6
0
class Role(db.Model):
    role_id = db.Column(db.Integer(), primary_key=True)
    role_name = db.Column(db.String(10))

    def __repr__(self):
        return self.role_name