Ejemplo n.º 1
0
class TestCategory(db.Model, DbModel):
    __tablename__ = 'test_categories'
    id = db.Column(db.String(80), primary_key=True, default=generate_id)
    name = db.Column(db.String(120), index=True, unique=True, nullable=False)
    tests = db.relationship("Test",
                            backref="category",
                            lazy="dynamic",
                            cascade="all, delete-orphan")

    def __repr__(self):
        return '<TestCategory %r>' % self.name
Ejemplo n.º 2
0
class Article(db.Model, DbModel):
    __tablename__ = 'articles'
    id = db.Column(db.String(80), primary_key=True, default=generate_id)
    name = db.Column(db.String(120), index=True, unique=True, nullable=False)
    category_id = db.Column(db.String(80),
                            db.ForeignKey('article_categories.id'),
                            index=True,
                            nullable=True)
    content = db.Column(db.Text, unique=False, nullable=True)

    def __repr__(self):
        return '<Article %r>' % self.name
Ejemplo n.º 3
0
class TestItem(db.Model, DbModel):
    __tablename__ = 'tests_items'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    item_no = db.Column(db.Integer, index=True, nullable=False)
    test_id = db.Column(db.String(80),
                        db.ForeignKey('tests.id'),
                        index=True,
                        nullable=False)
    content = db.Column(db.Text, nullable=True)

    answers = db.relationship("TestAnswer",
                              backref="item",
                              lazy="dynamic",
                              cascade="all, delete-orphan")

    def __repr__(self):
        return '<TestItem %r %r>' % (self.test_id, self.item_no)
Ejemplo n.º 4
0
class User(db.Model, DbModel):
    __tablename__ = 'users'
    id = db.Column(db.String(80), primary_key=True, default=generate_id)
    name = db.Column(db.String(80), index=True, unique=True, nullable=False)
    password = db.Column(db.String(120), unique=False, nullable=True)

    first_name = db.Column(db.String(120), index=True, unique=False, nullable=True)
    second_name = db.Column(db.String(120), index=True, unique=False, nullable=True)
    last_name = db.Column(db.String(120), index=True, unique=False, nullable=True)

    is_admin = db.Column(db.Boolean, index=True, unique=False, nullable=False, default=False)

    results = db.relationship("TestResult", backref="user", lazy="dynamic")

    def __repr__(self):
        return '<User %r>' % self.name

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        for param, value in kwargs.items():
            if param != 'password':
                setattr(self, param, value)
            else:
                self.set_password(value)

    def set_password(self, password):
        self.password = generate_password_hash(password)

    def verify_password(self, password):
        return check_password_hash(self.password, password)
    
    @hybrid_property
    def category(self):
        return 'Administrators' if self.is_admin else 'Users'
Ejemplo n.º 5
0
class TestAnswer(db.Model, DbModel):
    __tablename__ = 'test_answers'
    id = db.Column(db.Integer, primary_key=True)
    item_id = db.Column(db.Integer,
                        db.ForeignKey('tests_items.id'),
                        index=True,
                        nullable=False)
    result_id = db.Column(db.Integer,
                          db.ForeignKey('test_results.id'),
                          index=True,
                          nullable=False)
    answer = db.Column(db.Text, unique=False, nullable=True)
    result = db.Column(db.Boolean,
                       index=True,
                       unique=False,
                       nullable=False,
                       default=False)
    time = db.Column(db.DateTime,
                     unique=False,
                     nullable=False,
                     default=func.current_timestamp(),
                     onupdate=func.current_timestamp())

    def __repr__(self):
        return '<TestAnswer %r>' % self.id
Ejemplo n.º 6
0
class Test(db.Model, DbModel):
    __tablename__ = 'tests'
    id = db.Column(db.String(80), primary_key=True, default=generate_id)
    name = db.Column(db.String(120), index=True, unique=True, nullable=False)
    category_id = db.Column(db.String(80),
                            db.ForeignKey('test_categories.id'),
                            index=True,
                            nullable=True)
    not_before = db.Column(db.Date, nullable=True)
    not_after = db.Column(db.Date, nullable=True)
    max_duration = db.Column(db.Integer, nullable=True)
    items = db.relationship("TestItem",
                            backref="test",
                            lazy="dynamic",
                            cascade="all, delete-orphan")

    @hybrid_property
    def items_count(self):
        return self.items.count()

    results = db.relationship("TestResult", backref="test", lazy="dynamic")

    def __repr__(self):
        return '<Test %r>' % self.name
Ejemplo n.º 7
0
class TestResult(db.Model, DbModel):
    __tablename__ = 'test_results'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.String(80),
                        db.ForeignKey('users.id'),
                        index=True,
                        nullable=False)
    test_id = db.Column(db.String(80),
                        db.ForeignKey('tests.id'),
                        index=True,
                        nullable=False)
    begin = db.Column(db.DateTime,
                      unique=False,
                      nullable=False,
                      default=func.current_timestamp())
    end = db.Column(db.DateTime,
                    unique=False,
                    nullable=True,
                    default=func.current_timestamp(),
                    onupdate=func.current_timestamp())
    last_item = db.Column(db.Integer,
                          index=True,
                          unique=False,
                          nullable=False,
                          default=1)
    is_finished = db.Column(db.Boolean,
                            index=True,
                            unique=False,
                            nullable=False,
                            default=False)

    @hybrid_property
    def score(self):
        return self.answers.filter_by(result=True).count()

    @hybrid_property
    def percent(self):
        return round(self.score / self.test.items_count * 100)

    @hybrid_property
    def mark(self):
        percent = int(self.percent)
        if percent >= 86:
            return 5
        if percent >= 70:
            return 4
        if percent >= 50:
            return 3
        if percent > 0:
            return 2
        return 1

    answers = db.relationship("TestAnswer",
                              backref="test_results",
                              lazy="dynamic")

    @hybrid_property
    def category(self):
        return 'Finished tests' if self.is_finished else 'Time over tests'

    def __repr__(self):
        return '<TestResult %r>' % self.id