Example #1
0
class ContestantModel(db.Model):
    id = db.Column(db.Integer, primary_key=True, nullable=False)

    name = db.Column(db.String(16), nullable=False)

    gender = db.Column(ENUM('male', 'female'), nullable=False)

    birth = db.Column(db.Date, nullable=False)

    agent_phone = db.Column(db.String(16), nullable=False)

    phone = db.Column(db.String(16), nullable=True)

    school = db.Column(db.String(64), nullable=True)

    grade = db.Column(db.Integer, nullable=True)

    klass = db.Column(db.Integer, nullable=True)

    zip_code = db.Column(db.String(8), nullable=False)

    address = db.Column(db.String(128), nullable=False)

    detail_address = db.Column(db.String(128), nullable=False)

    sector = db.Column(ENUM('programming', 'design', 'business'),
                       nullable=False)

    photo = db.Column(db.String(64), nullable=True)

    password = db.Column(db.String(256), nullable=False)

    lunch_number = db.Column(db.Integer, nullable=False)
class Problems(Base):

    __tablename__ = 'Problems'

    problemIndex = Column(INTEGER(unsigned=True),
                          primary_key=True,
                          autoincrement=True,
                          nullable=False)
    problemName = Column(VARCHAR(255), nullable=False, unique=True)
    problemDifficulty = Column(ENUM(ENUMResources().const.BRONZE,
                                    ENUMResources().const.SILVER,
                                    ENUMResources().const.GOLD),
                               default=ENUMResources().const.BRONZE,
                               nullable=False)
    solutionCheckType = Column(ENUM(ENUMResources().const.SOLUTION,
                                    ENUMResources().const.CHECKER),
                               default=ENUMResources().const.CHECKER,
                               nullable=False)
    numberOfTestCase = Column(INTEGER(unsigned=True),
                              default=0,
                              nullable=False)
    limitedTime = Column(INTEGER(unsigned=True), default=3000,
                         nullable=False)  #ms
    limitedMemory = Column(INTEGER(unsigned=True),
                           default=1024,
                           nullable=False)  #MB
    problemPath = Column(TEXT, nullable=True)
    isDeleted = Column(ENUM(ENUMResources().const.TRUE,
                            ENUMResources().const.FALSE),
                       default=ENUMResources().const.FALSE,
                       nullable=False)
Example #3
0
class ArticlesOnBoard(Base):

    __tablename__ = 'ArticlesOnBoard'

    articleIndex = Column(INTEGER(unsigned=True),
                          primary_key=True,
                          autoincrement=True,
                          nullable=False)
    articleType = Column(ENUM(ENUMResources().const.NOTICE,
                              ENUMResources().const.QUESTION,
                              ENUMResources().const.NORMAL),
                         default=ENUMResources().const.NORMAL,
                         nullable=False)  # checker for notice
    writerIdIndex = Column(INTEGER(unsigned=True),
                           ForeignKey(Members.memberIdIndex,
                                      onupdate='CASCADE',
                                      ondelete='CASCADE'),
                           nullable=False)
    problemIndex = Column(INTEGER(unsigned=True),
                          ForeignKey(Problems.problemIndex,
                                     onupdate='CASCADE',
                                     ondelete='CASCADE'),
                          nullable=True)
    title = Column(VARCHAR(1024), nullable=False)
    content = Column(TEXT, nullable=False)  # contents of article
    viewCount = Column(INTEGER(unsigned=True), default=0, nullable=False)
    replyCount = Column(INTEGER(unsigned=True), default=0, nullable=False)
    sumOfLikeCount = Column(INTEGER(unsigned=True), default=0, nullable=False)
    updateIp = Column(VARCHAR(20), nullable=False)
    updateDate = Column(DATETIME, nullable=False)
    isDeleted = Column(ENUM(ENUMResources().const.TRUE,
                            ENUMResources().const.FALSE),
                       default=ENUMResources().const.FALSE,
                       nullable=False)
Example #4
0
class FeatureRequest(db.Model):
    __tablename__ = 'feature_request'

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(120), nullable=False)
    description = db.Column(db.Text, nullable=False)
    client = db.Column("client",
                       ENUM("Client A",
                            "Client B",
                            "Client C",
                            name="client_enum"),
                       nullable=False)
    client_priority = db.Column(db.SmallInteger, nullable=False)
    target_date = db.Column(db.Date, nullable=False)
    product_area = db.Column("product_area",
                             ENUM('Policies',
                                  'Billing',
                                  'Claims',
                                  'Reports',
                                  name="product_area_enum"),
                             nullable=False)
    created_at = db.Column(db.DateTime,
                           index=True,
                           default=datetime.datetime.utcnow)
    updated_at = db.Column(db.DateTime,
                           index=True,
                           default=datetime.datetime.utcnow,
                           onupdate=datetime.datetime.utcnow)

    def save(self, commit=True):
        if commit:
            instance = self
            if not instance.id:
                db.session.add(instance)

            try:
                db.session.commit()
            except Exception as e:
                print(e)
                db.session.rollback()
                return False

            return True
        return False

    def add(self):
        instance = self
        is_exist = instance.query.filter_by(client=instance.client).filter_by(
            client_priority=instance.client_priority).first()

        if not is_exist:
            return instance.save()

        for record in instance.query.filter_by(client=instance.client):
            record.client_priority += 1
            record.save()

        return instance.add()
class Current_Status(Base):
    __tablename__ = 'current_status'
    message_id = Column('message_id',
                        SMALLINT,
                        ForeignKey('status_message.id'),
                        primary_key=True)
    component_id = Column('component_id', BINARY(16), primary_key=True)
    component_type = Column('component_type',
                            ENUM('net', 'host', 'user', 'sensor', 'server',
                                 'system'),
                            primary_key=False)
    creation_time = Column('creation_time', TIMESTAMP, primary_key=False)
    viewed = Column('viewed', ENUM('true', 'false'), primary_key=False)
    supressed = Column('supressed', TINYINT, primary_key=False)
    supressed_time = Column('supressed_time', TIMESTAMP, primary_key=False)
    additional_info = Column('additional_info', TEXT, primary_key=False)
    message = relationship(Status_Message, lazy=False)

    # Sonar warning
    @staticmethod
    def _get_value_string(s):
        return s if s is not None else ''

    #
    @staticmethod
    def _get_value_uuid(s):
        return str(uuid.UUID(bytes=s)) if s is not None else ''

    @property
    def serialize(self):
        component_dict = self.host or self.net or self.sensor or self.user or self.system
        if len(component_dict.keys()) > 0:
            (component_name, component_ip) = component_dict.keys()[0]
        else:
            (component_name, component_ip) = (None, None)
        # TODO: Fix relationship in BBDD. Added this to avoid crashing in
        # apimethods.status
        #component_name = ""
        #component_ip = ""
        message_level = self.message.level if self.message is not None else ""
        message_description = self.message.desc if self.message is not None else ""
        return {
            'message_id': self.message_id,
            'component_id': self._get_value_uuid(self.component_id),
            'component_type': self.component_type,
            'component_name': self._get_value_string(component_name),
            'component_ip': self._get_value_string(component_ip),
            'supressed_time': self.supressed_time,
            'creation_time': self.creation_time,
            'supressed': self.supressed,
            'viewed': True if self.viewed != 'false' else False,
            'level': message_level,
            'description': message_description
        }
Example #6
0
class BackendCheck(Base):
    __tablename__ = 'backend_check'
    backend_name = Column(VARCHAR, ForeignKey('backend.name'), primary_key=True)
    backend = relationship('Backend', backref=backref('backend_check', uselist=False))
    ssl_hello_check = Column(TINYINT)
    http_check = Column(TINYINT)
    http_method = Column(ENUM('none','OPTIONS','HEAD','POST','GET'))
    http_url = Column(VARCHAR)
    http_check_expect = Column(ENUM('none','rstring','string','rstatus','status'))
    http_check_expect_not = Column(TINYINT)
    http_check_expect_value = Column(VARCHAR)
    disable_on_404 = Column(TINYINT)
    timeout_check = Column(VARCHAR)
Example #7
0
class ExchangeProgres(db.Model):
    __tablename__ = 'Exchange_Progress'

    id = Column(BIGINT(12), primary_key=True)
    book_no = Column(String(64, 'utf8mb4_bin'), nullable=False, comment='挂单编号')
    user_id = Column(BIGINT(12), nullable=False, comment='用户id')
    status = Column(ENUM('canceled', 'matched', 'sended', 'received',
                         'set_wallet', 'payed', 'disputed', 'complete'),
                    nullable=False,
                    comment='状态')
    create_time = Column(INTEGER(11), nullable=False, comment='创建时间')
    expire_time = Column(INTEGER(11), comment='过期时间')
    extend_remark = Column(JSON, comment='备注')
    entrust_type = Column(ENUM('maker', 'taker'))
Example #8
0
class Backend(Base):
    __tablename__ = 'backend'
    name = Column(VARCHAR, primary_key=True)
    balance_method = Column(ENUM('','source','first','static-rr','leastconn','roundrobin'))
    mode = Column(ENUM('none','tcp','http'))
    forwardfor = Column(TINYINT)
    forwardfor_expect = Column(VARCHAR)
    forwardfor_header = Column(VARCHAR)
    cookie = Column(ENUM('none','prefix','rewrite','insert'))
    cookie_name = Column(VARCHAR)
    cookie_option_indirect = Column(TINYINT)
    cookie_option_nocache = Column(TINYINT)
    cookie_option_postonly = Column(TINYINT)
    cookie_domain = Column(VARCHAR)
Example #9
0
class Members(Base):

    __tablename__ = 'Members'

    memberIdIndex = Column(INTEGER(unsigned=True),
                           primary_key=True,
                           autoincrement=True,
                           nullable=False)
    memberId = Column(VARCHAR(255), nullable=False, unique=True)
    password = Column(VARCHAR(1024), nullable=False)
    memberName = Column(VARCHAR(1024), nullable=False)
    contactNumber = Column(VARCHAR(20), nullable=True)
    emailAddress = Column(VARCHAR(1024), nullable=True)
    detailInformation = Column(VARCHAR(1024), nullable=True)
    authority = Column(SET(SETResources().const.ADMINISTRATOR,
                           SETResources().const.USER),
                       default=SETResources().const.USER,
                       nullable=False)
    limitedUseDate = Column(DATETIME, default=None, nullable=True)
    signedInDate = Column(DATETIME, nullable=False)
    lastAccessDate = Column(DATETIME, nullable=True)
    comment = Column(TEXT, nullable=True)
    isDeleted = Column(ENUM(ENUMResources().const.TRUE,
                            ENUMResources().const.FALSE),
                       default=ENUMResources().const.FALSE,
                       nullable=False)
Example #10
0
class WorkspaceInvitation(db.Model):
    __tablename__ = 'WorkspaceInvitation'

    winvitorid = db.Column(ForeignKey('WorkspaceMembership.uid'),
                           primary_key=True,
                           nullable=False)
    wid = db.Column(ForeignKey('WorkspaceMembership.wid'),
                    primary_key=True,
                    nullable=False)
    winviteeemail = db.Column(VARCHAR(50), primary_key=True, nullable=False)
    winvitetime = db.Column(DateTime, nullable=False)
    wstatus = db.Column(ENUM('accept', 'reject', 'pending'))

    #invite_workspace = db.relationship('WorkspaceInvitation', backref='WorkspaceMembership',
    #                                  primaryjoin=(WorkspaceMembership.uid == winvitorid))

    def __init__(self, winvitorid, wid, winviteeemail, winvitetime, wstatus):
        self.winvitorid = winvitorid
        self.wid = wid
        self.winviteeemail = winviteeemail
        self.winvitetime = winvitetime
        self.wstatus = wstatus

    def to_json(self):
        json_comment = {
            'winvitorid': self.winvitorid,
            'wid': self.wid,
            'winviteeemail': self.winviteeemail,
            'winvitetime': self.winvitetime,
            'wstatus': self.wstatus
        }
        return json_comment
Example #11
0
class ChannelInvitation(db.Model):
    __tablename__ = 'ChannelInvitation'

    cinvitorid = db.Column(ForeignKey('ChannelMembership.uid'),
                           primary_key=True)
    cid = db.Column(ForeignKey('ChannelMembership.cid'), primary_key=True)
    cinviteeid = db.Column(ForeignKey('User.uid'), primary_key=True)
    cinvitetime = db.Column(DateTime)
    cstatus = db.Column(ENUM('accept', 'reject', 'pending'))

    def __init__(self, cinvitorid, cid, cinviteeid, cinvitetime, cstatus):
        self.cinvitorid = cinvitorid
        self.cid = cid
        self.cinviteeid = cinviteeid
        self.cinvitetime = cinvitetime
        self.cstatus = cstatus

    def to_json(self):
        json_comment = {
            'cinvitorid': self.cinvitorid,
            'cid': self.cid,
            'cinviteeid': self.cinviteeid,
            'cinvitetime': self.cinvitetime,
            'cstatus': self.cstatus
        }
        return json_comment
Example #12
0
class Channel(db.Model):
    __tablename__ = 'Channel'

    cid = db.Column(INTEGER(11), primary_key=True, autoincrement=True)
    creatorid = db.Column(ForeignKey('WorkspaceMembership.uid'))
    wid = db.Column(ForeignKey('WorkspaceMembership.wid'))
    ctype = db.Column(ENUM('public', 'private', 'direct'))
    cname = db.Column(VARCHAR(50), nullable=False)
    ctime = db.Column(DateTime, nullable=False)
    #create_channel = db.relationship('Channel', backref='WorkspaceMembership',
    #                               primaryjoin=(creatorid==WorkspaceMembership.uid))
    member_channel = db.relationship('ChannelMembership', backref='Channel')

    def __init__(self, creatorid, wid, ctype, cname, ctime):
        self.creatorid = creatorid
        self.wid = wid
        self.ctype = ctype
        self.cname = cname
        self.ctime = ctime

    def to_json(self):
        json_comment = {
            'cid': self.cid,
            'creatorid': self.creatorid,
            'wid': self.wid,
            'ctype': self.ctype,
            'cname': self.cname,
            'ctime': self.ctime
        }
        return json_comment
Example #13
0
class DataOfMatch(Base):

    __tablename__ = 'DataOfMatch'

    dataOfMatchIndex = Column(INTEGER(unsigned=True),
                              primary_key=True,
                              autoincrement=True,
                              nullable=False)

    problemIndex = Column(INTEGER(unsigned=True),
                          autoincrement=False,
                          nullable=False)

    challengerIndex = Column(INTEGER(unsigned=True),
                             autoincrement=False,
                             nullable=False)

    championIndex = Column(INTEGER(unsigned=True),
                           autoincrement=False,
                           nullable=False)

    result = Column(
        ENUM('win', 'lose', 'draw', '...ing...', 'server error'),
        default='...ing...',
    )

    positionData = Column(TEXT, unique=False)

    boardData = Column(TEXT, unique=False)
class Status_Message(Base):
    __tablename__ = 'status_message'
    id = Column('id', SMALLINT, primary_key=True)
    level = Column('level',
                   ENUM('info', 'error', 'warning'),
                   primary_key=False)
    content = Column('content', TEXT, primary_key=False)
    desc = Column('description', TEXT, primary_key=False)
    actions = relationship('Status_Action',
                           secondary=Status_Message_Action,
                           lazy='select')

    @property
    def serialize(self):
        actions = [{
            'content': x.content,
            'link': x.link
        } for x in self.actions]
        return {
            'msg_id': self.id,
            'level': self.level,
            'content': self.content,
            'desc': self.desc,
            'actions': actions
        }
Example #15
0
class User(Base):

    __tablename__ = 'User'

    userIndex = Column(INTEGER(unsigned=True),
                       primary_key=True,
                       autoincrement=True,
                       nullable=False)

    userId = Column(VARCHAR(20),
                    nullable=False,
                    unique=True)

    password = Column(CHAR(255),
                      nullable=False,
                      unique=False)

    nickName = Column(VARCHAR(20),
                      nullable=False,
                      unique=True)

    eMail = Column(VARCHAR(100),
                   nullable=False,
                   unique=False)

    lastMatchDate = Column(DATETIME,
                           default=None,
                           nullable=True)

    authority = Column(ENUM('admin', 'semiAdmin', 'user'),
                       nullable=False,
                       default='user')
Example #16
0
class PostModel(db.Model, CommonMixin):
    """
    失物招领 + 寻物启事 文章
    """
    __tablename__ = 'posts'

    id = db.Column(db.Integer, primary_key=True)
    type = db.Column(ENUM('lost', 'found', 'people'), comment='文章类型')
    user_id = db.Column(db.Integer,
                        db.ForeignKey('users.id'),
                        nullable=True,
                        comment='用户ID')  # tourists also can post
    contact = db.Column(db.String(20), comment='联系人')
    title = db.Column(db.String(20), comment='标题')
    phone = db.Column(db.String(20), comment='手机号')
    content = db.Column(db.Text, comment='留言内容')
    comment_ids = db.relationship('CommentModel', backref='post')
    image = db.Column(db.String(256), comment='图片路径')

    def asdict(self, columns=None):
        if columns is None:
            columns = [
                'id', 'content', 'title', 'updated_time', 'type', 'contact',
                'phone', 'image'
            ]
        return super().asdict(columns)
Example #17
0
class PackageFile(TableBase):
    # 包文件id
    pfile_id = sa.Column(INTEGER(unsigned=True),
                         nullable=False,
                         primary_key=True,
                         autoincrement=True)
    # 安装包引用的resource_id, None则为外部地址
    resource_id = sa.Column(INTEGER(unsigned=True), nullable=True)
    # 安装包文件名
    filename = sa.Column(VARCHAR(128), nullable=True)
    package_id = sa.Column(sa.ForeignKey('packages.package_id',
                                         ondelete="RESTRICT",
                                         onupdate='RESTRICT'),
                           nullable=False)
    # 包类型
    ftype = sa.Column(VARCHAR(32), nullable=False)
    # 安装包版本号
    gversion = sa.Column(VARCHAR(64), nullable=False)
    address = sa.Column(VARCHAR(200), nullable=True)
    uptime = sa.Column(INTEGER(unsigned=True), nullable=False)
    status = sa.Column(VARCHAR(16),
                       ENUM(*manager_common.DOWNFILESTATUS),
                       default=manager_common.DOWNFILE_FILEOK,
                       nullable=False)
    desc = sa.Column(VARCHAR(256), nullable=True)
    __table_args__ = (sa.UniqueConstraint('address', name='address_unique'),
                      sa.Index('ftype_index',
                               'ftype'), InnoDBTableBase.__table_args__)
Example #18
0
class SocialMedia(Base, TableArgsMixin):
    __tablename__ = "socialmedia"

    id = Column(INTEGER(unsigned=True), primary_key=True, autoincrement=True)
    type = Column(VARCHAR(128), nullable=False, server_default="")
    site = Column(ENUM(*socialmedia_sites), nullable=False)
    ref_id = Column(BIGINT(unsigned=True), nullable=False,
                    server_default=text("0"))
    weibo_id = Column(VARCHAR(32), nullable=False,
                        server_default="")
    weibo_name = Column(VARCHAR(64), nullable=True, server_default=None)
    weibo_photo = Column(VARCHAR(64), nullable=False, server_default="")
    weibo_tweets = Column(INTEGER(unsigned=True), nullable=False,
                          server_default=text("0"))
    weibo_followers = Column(INTEGER(unsigned=True), nullable=False,
                             server_default=text("0"))
    weibo_following = Column(INTEGER(unsigned=True), nullable=False,
                             server_default=text("0"))
    weibo_brief = Column(VARCHAR(128), nullable=False, server_default="")

    visible = Column(TINYINT, nullable=False,
                     server_default=text(VisibleValue.SHOWN))

    created_at = Column(
        TIMESTAMP, nullable=False,
        server_default=text("CURRENT_TIMESTAMP")
    )
    updated_at = Column(
        TIMESTAMP, nullable=False,
        server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
    )

    Index("ix__type__ref_id", type, ref_id)
class RepliesOnBoard(Base):

    __tablename__ = 'RepliesOnBoard'

    boardReplyIndex = Column(INTEGER(unsigned=True),
                             primary_key=True,
                             autoincrement=True,
                             nullable=False)
    articleIndex = Column(INTEGER(unsigned=True),
                          ForeignKey(ArticlesOnBoard.articleIndex,
                                     onupdate='CASCADE',
                                     ondelete='CASCADE'),
                          nullable=False)
    boardReplierIdIndex = Column(INTEGER(unsigned=True),
                                 ForeignKey(Members.memberIdIndex,
                                            onupdate='CASCADE',
                                            ondelete='CASCADE'),
                                 nullable=False)
    boardReplyContent = Column(TEXT, nullable=False)
    sumOfLikeCount = Column(INTEGER(unsigned=True), default=0, nullable=False)
    boardReplierIp = Column(VARCHAR(20), nullable=False)
    boardRepliedDate = Column(DATETIME, nullable=False)
    isDeleted = Column(ENUM(ENUMResources().const.TRUE,
                            ENUMResources().const.FALSE),
                       default=ENUMResources().const.FALSE,
                       nullable=False)
Example #20
0
class Masteries(Base):
    __tablename__ = 'Masteries'

    id = Column(Integer, primary_key=True)
    tree = Column(ENUM("Ferocity", "Resolve", "Cunning"), nullable=False)
    ranks = Column(Integer, nullable=False)
    image = Column(String(50), nullable=False)

    translations = relationship("MasteriesTranslations", lazy="dynamic")

    def toJson(self, id_locale, **kwargs):
        data = {
            "translation": self.get_translation(id_locale),
            "tree": self.tree,
            "ranks": self.ranks,
            "image": self.image
        }
        for key, value in kwargs.items():
            data[key] = value

        return data

    def get_translation(self, id_locale):
        data = self.translations.filter_by(id_language=id_locale).one()
        return {"name": data.name, "description": data.description}
Example #21
0
class User(Base):
    __tablename__ = 'users'

    key = Column(CHAR(40, collation='utf8_unicode_ci'), primary_key=True)
    account = Column(CHAR(20, collation='utf8_unicode_ci'), nullable=False)
    passwd = Column(CHAR(90, collation='utf8_unicode_ci'))
    name = Column(VARCHAR(30, collation='utf8_unicode_ci'), nullable=False)
    identity = Column(ENUM('學生', '教師', charset='utf8'), nullable=False)
    admin = Column(BOOLEAN, nullable=False)

    def __init__(self,
                 account,
                 passwd,
                 name,
                 identity='學生',
                 admin=False,
                 **kwargs):
        self.key = uuid.uuid3(uuid.uuid1(), account.encode()).hex
        self.account = account
        self.name = name
        self.identity = identity
        self.admin = admin
        self.passwd = self.hash_passwd(self.account, passwd)

    @staticmethod
    def make_salt():
        return ''.join(random.choice(string.letters) for i in xrange(5))

    @classmethod
    def hash_passwd(cls, account, passwd, salt=''):
        if not salt:
            salt = cls.make_salt()
        h = hashlib.sha256(account + passwd + salt).hexdigest()
        return '%s,%s' % (h, salt)

    def check_passwd(self, passwd):
        salt = self.passwd.split(',')[1]
        return self.passwd == self.hash_passwd(self.account, passwd, salt)

    @classmethod
    def by_key(cls, key, sql_session):
        q = sql_session.query(cls)
        return q.filter(cls.key == key)

    def to_dict(self):
        return {
            'key': self.key,
            'name': self.name,
            'account': self.account,
            'admin': self.admin,
            'identity': self.identity,
        }

    def to_dict_str(self):
        _l = []
        _map = self.to_dict()
        for i in _map:
            _l.append("'%s':'%s'" % (i, _map[i]))
        return '{%s}' % ','.join(_l)
Example #22
0
class KqUserInfo(Base):
    __tablename__ = 'kq_user_info'

    user_id = Column(BIGINT(20), primary_key=True, comment='员工id')
    badge_number = Column(String(24, 'utf8_croatian_ci'), nullable=False, comment='工号')
    name = Column(String(40, 'utf8_croatian_ci'), comment='员工名称')
    gender = Column(ENUM('M', 'F', ''), comment='性别:M 男 F 女')
    notes = Column(String(500, 'utf8_croatian_ci'), comment='备注')
Example #23
0
class Frontend(Base):
    __tablename__ = 'frontend'
    name = Column(VARCHAR, primary_key=True)
    bind_address = Column(VARCHAR)
    bind_port = Column(INT)
    default_backend = Column(VARCHAR)
    mode = Column(ENUM('none','tcp','http'))
    maxconn = Column(INT)
class UserModel(LoginMixin, db.Model, CommonMixin):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True, comment='主键')
    login = db.Column(db.String(20), comment='账号ID')
    nickname = db.Column(db.String(20), comment='昵称')
    password = db.Column(db.String(128), comment='密码')
    role = db.Column(ENUM('admin', 'user'), nullable=False, comment='用户类型')
    email = db.Column(db.String(20), comment='email')
    comment_ids = db.relationship('CommentModel', backref='user')
    post_ids = db.relationship('PostModel', backref='user')

    def check(self, password):
        """密码验证"""
        return check_password_hash(self.password, password.encode())

    @classmethod
    def validate_login(cls, form):
        """
        验证登陆
        :type form: dict
        :return: UserModel
        :rtype: UserModel
        """
        user = UserModel.exist(login=form['login'], role=form['role'])
        if user is None:
            return None
        elif not user.check(form['password']):
            return None
        return user

    @classmethod
    def register_user(cls, form):
        """
        注册用户
        :type form: dict
        :rtype: UserModel, str
        """
        if form.get('email') and cls.exist(email=form['email']):
            return None, 'email is already exist'
        if cls.exist(login=form['login']):
            return None, 'user is already exist'

        user = cls()
        user.login = form['login']
        user.nickname = form['nickname']
        user.email = form.get('email') or ''
        user.role = 'user'  # 接口只能注册user类型
        password = generate_password_hash(form['password'])
        user.password = password
        db.session.add(user)
        db.session.commit()
        return user, 'register success'

    def asdict(self, columns=None):
        if columns is None:
            columns = ['id', 'login', 'nickname', 'email', 'role']
        return super().asdict(columns)
class Forecasting(Base):
    __tablename__ = "forecasting"
    """Summarizes impression count for each page"""
    id = Column(Integer, primary_key=True, autoincrement=True)
    page_id = Column(Integer, nullable=True, primary_key=True, default=None)
    count = Column(BigInteger, nullable=False)  # Impressions per month
    video_id = Column(Integer, nullable=True, default=None, primary_key=True)
    app_id = Column(Integer, nullable=True, primary_key=True, default=None)
    country = Column(ENUM(*countries), nullable=False, primary_key=True)
Example #26
0
class Blog(db.Model):
    __tablename__ = 'Blog'

    id = Column(BIGINT(12), primary_key=True)
    title = Column(String(140, 'utf8mb4_bin'))
    content = Column(Text(collation='utf8mb4_bin'))
    status = Column(ENUM('del', 'normal'))
    create_time = Column(INTEGER(11))
    update_time = Column(INTEGER(11))
Example #27
0
class Reminder(Base):
    __tablename__ = 'reminders'

    id = Column(INT(unsigned=True), primary_key=True)
    uid = Column(String(64),
                 default=lambda: Reminder.create_uid(),
                 unique=True)

    name = Column(String(24), default='Reminder')

    message_id = Column(INT(unsigned=True),
                        ForeignKey(Message.id, ondelete='RESTRICT'),
                        nullable=False)
    message = relationship(Message)

    channel_id = Column(INT(unsigned=True),
                        ForeignKey(Channel.id, ondelete='CASCADE'),
                        nullable=True)

    time = Column(INT(unsigned=True))
    enabled = Column(Boolean, nullable=False, default=True)

    avatar = Column(
        String(512),
        default=
        'https://raw.githubusercontent.com/reminder-bot/logos/master/Remind_Me_Bot_Logo_PPic.jpg',
        nullable=False)
    username = Column(String(32), default='Reminder', nullable=False)

    interval = Column(INT(unsigned=True))

    method = Column(ENUM('remind', 'natural', 'dashboard', 'todo'))
    set_by = Column(INT(unsigned=True),
                    ForeignKey(User.id, ondelete='SET NULL'),
                    nullable=True)
    set_at = Column(TIMESTAMP,
                    nullable=True,
                    default=datetime.now,
                    server_default='CURRENT_TIMESTAMP()')

    @staticmethod
    def create_uid() -> str:
        full: str = ''
        while len(full) < 64:
            full += secrets.choice(ALL_CHARACTERS)

        return full

    def message_content(self):
        if len(self.message.content) > 0:
            return self.message.content

        elif self.message.embed is not None:
            return self.message.embed.description

        else:
            return ''
Example #28
0
class PurchaseModel(DeclarativeBase):
    __tablename__ = 'purchase'
    __table_args__ = (Index('id', unique=True), )

    id = Column(Integer, primary_key=True)
    customer_id = Column(Integer, nullable=False)
    status = Column(ENUM('new', 'canceled'), nullable=True)
    product_id = Column(Integer, nullable=False)
    amount = Column(Numeric(precision=13, scale=2), nullable=True)
    date = Column(DateTime)
Example #29
0
class Source(db.Model):
    __tablename__ = 'sources'
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}
    id = Column(Integer, primary_key=True)
    work_id = Column('author_code',
                     Integer,
                     ForeignKey('works.id'),
                     nullable=False,
                     key='work_id')
    type = Column(ENUM('B', 'C', 'J', 'L', 'M', 'P'), index=True)
    citation = Column(Text)
    url = Column(Text)
    comments = Column(Text)
    ordered = Column(Date)
    status_code = Column(ENUM('N', 'E', 'M', 'R', 'X', 'XP', 'XR'),
                         default='N',
                         index=True)
    work = db.relationship('Work',
                           backref=db.backref('sources', cascade="all,delete"))
Example #30
0
class User(db.Model, UserMixin):
    __tablename__ = "user_tbl"
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.String(12), index=True, unique=True)
    user_pw = db.Column(db.String(94))
    user_email = db.Column(db.String(120), unique=True)
    user_name = db.Column(db.String(64))
    user_department = db.Column(db.String(64))
    user_grade = db.Column(TINYINT(4, unsigned=True, zerofill=True))
    user_gender = db.Column(ENUM('M', 'F'), default='M')
    user_membership = db.Column(ENUM('N', 'A'), default='N')
    user_registration_date = db.Column(db.DATETIME, default=func.now())
    user_about_me = db.Column(db.String(140))
    user_last_sign_in = db.Column(db.DateTime, default=datetime.utcnow())
    posts = db.relationship('Post', backref='author', lazy='dynamic')

    def __init__(self, **kwargs):
        self.user_id = kwargs.get('user_id')
        self.user_pw = generate_password_hash(kwargs.get('user_pw'))
        self.user_name = kwargs.get('user_name')
        self.user_email = kwargs.get('user_email')
        self.user_department = kwargs.get('user_department')
        self.user_grade = kwargs.get('user_grade')
        self.user_gender = kwargs.get('user_gender')

    def __repr__(self):
        return '<USER {}>'.format(self.user_id)

    def as_dict(self):
        return {x.name: getattr(self, x.name) for x in self.__table__.columns}

    def set_user_pw(self, password):
        self.user_pw = generate_password_hash(password)

    def check_user_pw(self, password):
        return check_password_hash(self.user_pw, password)

    def avatar(self, size):
        digest = md5(self.user_email.lower().encode('utf-8')).hexdigest()
        return 'https://www.gravatar.com/avatar/{0}?d=identicon&s={1}'.format(
            digest, size)