Exemplo n.º 1
0
class ContestStage(SurrogatePK, Model):
    """Crossword challenge."""

    __tablename__ = 'contests_stages'
    name = Column(db.String(150), nullable=False)
    finish = Column(ArrowType(), nullable=True, default=None)

    contest_id = reference_col('contests', nullable=False)
    contest = relationship('Contest', backref='stages')

    __table_args__ = (
        UniqueConstraint('contest_id', 'name'),
    )
Exemplo n.º 2
0
class Crossword(SurrogatePK, Model):
    """Crossword challenge."""

    __tablename__ = 'crosswords'
    name = Column(db.String(80), nullable=False)
    score = Column(db.Float(), nullable=False, default=0)
    description = deferred(Column(db.Text(), nullable=True))
    """^ Markdown field"""
    body = deferred(Column(db.Text(), nullable=False))
    solution = deferred(Column(db.Text(), nullable=False))

    def __str__(self):
        return f'{super().__str__()}: {self.name}'
Exemplo n.º 3
0
class UserCrossword(SurrogatePK, Model):
    user_id = reference_col('users', nullable=False)
    user = relationship('User')

    contest_id = reference_col('contests', nullable=False)
    contest = relationship('Contest')

    crossword_id = reference_col('crosswords', nullable=False)
    crossword = relationship('Crossword', lazy='joined')

    solved = Column(ArrowType(), nullable=True, default=None)
    solution = deferred(Column(db.Text(), nullable=True, default=True))

    __table_args__ = (
        UniqueConstraint('user_id', 'contest_id', 'crossword_id'),
    )
Exemplo n.º 4
0
class User(UserMixin, SurrogatePK, Model):
    """A user of the app."""

    __tablename__ = 'users'
    email = Column(db.String(80), unique=True, nullable=False)
    #: The hashed password
    password = Column(db.Binary(128), nullable=True)
    created_at = Column(ArrowType, nullable=False, default=arrow.utcnow)
    display_name = Column(db.String(80), nullable=True)
    full_name = Column(db.String(100), nullable=True)
    active = Column(db.Boolean(), default=False)
    is_admin = Column(db.Boolean(), default=False)

    def __init__(self, email, password=None, **kwargs):
        """Create instance."""
        db.Model.__init__(self, email=email, **kwargs)
        if password:
            self.set_password(password)
        else:
            self.password = None

    def set_password(self, password):
        """Set password."""
        self.password = bcrypt.generate_password_hash(password)

    def check_password(self, value):
        """Check password."""
        return bcrypt.check_password_hash(self.password, value)

    def __repr__(self):
        """Represent instance as a unique string."""
        return f'<User({self.email!r})>'

    def __eq__(self, other):
        return other and self.id == other.id
Exemplo n.º 5
0
class ContestInitialCrosswords(SurrogatePK, Model):
    __tablename__ = 'contest_crossword'
    contest_id = reference_col('contests', nullable=False)
    contest = relationship('Contest', backref='initial_crosswords')

    crossword_id = reference_col('crosswords', nullable=False)
    crossword = relationship('Crossword')

    order = Column(db.Integer(), nullable=False, default=0)

    __table_args__ = (
        UniqueConstraint('contest_id', 'crossword_id'),
        UniqueConstraint('contest_id', 'order'),
    )
Exemplo n.º 6
0
class UserStats(SurrogatePK, Model):
    """Crossword challenge."""

    __tablename__ = 'user_stats'
    user_id = reference_col('users', nullable=False)
    user = relationship('User', backref='stats')

    contest_id = reference_col('contests', nullable=False)
    contest = relationship('Contest', backref='stats')

    score = Column(db.Float(), nullable=False, default=0.0)

    __table_args__ = (
        UniqueConstraint('contest_id', 'user_id'),
    )
Exemplo n.º 7
0
class ContestStageWinner(SurrogatePK, Model):
    """Crossword challenge."""

    __tablename__ = 'contests_stage_winners'
    user_id = reference_col('users', nullable=False)
    user = relationship('User', backref='contest_stage_wins')

    score = Column(db.Float(), nullable=False)

    contest_stage_id = reference_col('contests_stages', nullable=False)
    contest_stage = relationship('ContestStage', backref='winners')

    __table_args__ = (
        UniqueConstraint('contest_stage_id', 'user_id'),
    )
Exemplo n.º 8
0
class Role(SurrogatePK, Model):
    """A role for a user."""

    __tablename__ = 'roles'
    name = Column(db.String(80), unique=True, nullable=False)
    user_id = reference_col('users', nullable=True)
    user = relationship('User', backref='roles')

    def __init__(self, name, **kwargs):
        """Create instance."""
        db.Model.__init__(self, name=name, **kwargs)

    def __repr__(self):
        """Represent instance as a unique string."""
        return '<Role({name})>'.format(name=self.name)
Exemplo n.º 9
0
class Contest(SurrogatePK, Model):
    """Crossword challenge."""

    __tablename__ = 'contests'
    name = Column(db.String(150), nullable=False)
    slug = Column(db.String(20), nullable=False, unique=True)
    description = Column(db.Text(), nullable=True)
    """^ Markdown field"""
    start = Column(ArrowType(), nullable=True, default=None)
    end = Column(ArrowType(), nullable=True, default=None)

    rules = Column(db.Text(), nullable=True)
    """^ Markdown field"""

    @property
    def active(self):
        if not self.start:
            return False

        now = arrow.utcnow()
        return self.start <= now and (not self.end or now < self.end)

    def __str__(self):
        return f'{super().__str__()}: {self.slug}'