Ejemplo n.º 1
0
class BookVolume(db.Model):
    ''' 书籍卷节信息 '''
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    id = db.Column(db.Integer(), primary_key=True)  # ID
    book_id = db.Column(db.Integer(), index=True)  # 书籍ID
    volume_id = db.Column(db.Integer(), index=True)  # 卷ID
    volume_name = db.Column(db.String(100))  # 卷名
    create_time = db.Column(db.DateTime, default=datetime.now())  # 创建时间(第三方)
    chapter_count = db.Column(db.Integer, default=0)  # 卷字数
    update_time = db.Column(db.DateTime, default=datetime.now())  # 更新时间(第三方)
    created = db.Column(db.DateTime, server_default=func.now())  # 创建时间

    def __init__(self, data):
        self.book_id = int(data['book_id'])
        self.volume_id = int(data['volume_id'])
        self.volume_name = data['volume_name']
        now = datetime.now()
        self.create_time = data.get('create_time', now)
        self.chapter_count = int(data.get('chapter_count', 0))
        self.update_time = data.get('update_time', now)

    def update(self, data):
        self.volume_name = data['volume_name']
        self.create_time = data['create_time']
        self.chapter_count = int(data['chapter_count'])
        self.update_time = data['update_time']

    def to_dict(self):
        return dict(
            book_id = self.book_id,
            volume_id = self.volume_id,
            volume_name = self.volume_name,
            chapter_count = self.chapter_count
        )
Ejemplo n.º 2
0
class BookCategory(db.Model):
    ''' 书籍分类信息 '''
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    cate_id = db.Column(db.Integer(), primary_key=True)  # 分类ID
    cate_name = db.Column(db.String(50))  # 分类名称
    parent_id = db.Column(db.Integer(), server_default='-1')  # 上级ID  1:男生, 2:出版, 3:女生
    showed = db.Column(db.Boolean(), server_default='1')
    icon = db.Column(db.String(100))
    created = db.Column(db.DateTime, server_default=func.now())  # 创建时间

    def __init__(self, cate_name, parent_id=-1):
        self.cate_name = cate_name
        self.parent_id = parent_id

    def to_dict(self):
        return dict(
            cate_id = self.cate_id,
            cate_name = self.cate_name,
            parent_id = self.parent_id,
            created = self.created.strftime('%Y-%m-%d %H:%M:%S')
        )

    def to_admin_dict(self):
        return dict(
            cate_id = self.cate_id,
            showed = 1 if self.showed else 0,
            cate_name = self.cate_name,
            parent_id = self.parent_id,
            icon = self.icon if self.icon else '',
            created = self.created.strftime('%Y-%m-%d %H:%M:%S')
        )
Ejemplo n.º 3
0
class BuyRankings(db.Model):
    """ 购买排行(用于书籍排行) """
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}
    
    id = db.Column(db.Integer(), primary_key=True)  # ID
    book_id = db.Column(db.Integer(), index=True)  # 书籍ID
    book_name = db.Column(db.String(100))  # 书籍名称
    channel_type = db.Column(db.SmallInteger(), index=True) #1男2女
    author_name = db.Column(db.String(50))#作者
    is_publish = db.Column(db.Integer())  # 是否出版(1:是;2:否)
    status = db.Column(db.Integer())# 连载状态(1:已完结;2:未完结)
    created = db.Column(db.DateTime)  # 创建时间
    buy_num = db.Column(db.Integer()) #购买次数
    book_time = db.Column(db.DateTime)  # 创建时间

    
    def __init__(self, book_id, channel_type, author_name, is_publish, status, created, buy_num, book_name, book_time):
        self.book_id = book_id
        self.channel_type = channel_type
        self.author_name = author_name
        self.is_publish = is_publish
        self.status = status
        self.created = created
        self.buy_num = buy_num
        self.book_name = book_name
        self.book_time = book_time
Ejemplo n.º 4
0
class PurchasedBook(db.Model):
    """已购买书籍信息"""
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    id = db.Column(db.Integer(), primary_key=True)  # ID
    user_id = db.Column(db.Integer(), index=True)  # 用户id
    book_id = db.Column(db.Integer(), index=True)  # 书籍ID
    buy_info = db.Column(db.Text(), default='{}')  # 已购买章节 {'卷id':[章节id,...]}
    auto_buy = db.Column(db.Boolean, default=False)  # 是否自动购买下一章
    created = db.Column(db.DateTime, server_default=func.now())  # 创建时间

    db.UniqueConstraint('user_id', 'book_id')
Ejemplo n.º 5
0
class TaobaoToken(db.Model):

    __tablename__ = 'core_taobao_token'

    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer())
    taobao_id = db.Column(db.Integer())
    screen_name = db.Column(db.VARCHAR(64))
    open_uid = db.Column(db.VARCHAR(64))
    isv_uid = db.Column(db.VARCHAR(64))

    def __repr__(self):
        return "<Taobao User Name %r>" % self.screen_name
Ejemplo n.º 6
0
class BookChapters(db.Model):
    ''' 书籍章节信息 '''
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    id = db.Column(db.Integer(), primary_key=True)  # ID
    book_id = db.Column(db.Integer(), index=True)  # 书籍ID
    volume_id = db.Column(db.Integer(), index=True)  # 卷ID
    chapter_id = db.Column(db.Integer(), index=True)  # 章节ID
    chapter_name = db.Column(db.String(100))  # 章节名称
    word_count = db.Column(db.Integer)  # 字数
    content_url = db.Column(db.String(300), server_default='')  # 章节内容url 仅外链小说用到

    # add by [email protected] 2017-9-12
    money = db.Column(db.Integer, server_default='0')  # 分/千字

    create_time = db.Column(db.DateTime)  # 创建时间(第三方)
    update_time = db.Column(db.DateTime)  # 更新时间(第三方)
    free_source = db.Column(db.String(50), server_default='', index=True)  # 外链 源名
    created = db.Column(db.DateTime, server_default=func.now())  # 创建时间

    def __init__(self, data):
        self.book_id = int(data['book_id'])
        self.volume_id = int(data['volume_id'])
        self.chapter_id = int(data['chapter_id'])
        self.chapter_name = data['chapter_name']
        self.word_count = int(data['word_count'])
        self.create_time = data['create_time']
        self.update_time = data['update_time']

    def to_dict(self):
        return dict(
            book_id = self.book_id,
            volume_id = self.volume_id,
            chapter_id = self.chapter_id,
            chapter_name = self.chapter_name,
            word_count = self.word_count,
            content_url = self.content_url,
        )

    def to_admin_dict(self):
        return dict(
            id = self.id,
            book_id = self.book_id,
            volume_id = self.volume_id,
            chapter_id = self.chapter_id,
            chapter_name = self.chapter_name,
            word_count = self.word_count,
            money = self.money
        )
Ejemplo n.º 7
0
class Client(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(), nullable=False)
    last_name = db.Column(db.String(), nullable=False)
    gender = db.Column(db.String(), nullable=False)
    country = db.Column(db.String(), nullable=False)
    dob = db.Column(db.String(), nullable=False)
    phone_no = db.Column(db.Integer(), nullable=False)
    criminal_record = db.Column(db.Boolean, default=False)
    ssn = db.Column(db.Integer(), nullable=False)
    date_registered = db.Column(db.DateTime,
                                nullable=False,
                                default=datetime.now)
    agent_id = db.Column(db.Integer, db.ForeignKey('agent.id'))
    apartment_id = db.Column(db.Integer, db.ForeignKey('apartment.id'))
Ejemplo n.º 8
0
class HotWords(BaseModel, TimestampMixin):

    __tablename__ = 'hot_words'

    id = db.Column(db.Integer(), primary_key=True)
    word = db.Column(db.VARCHAR(255))

    def __init__(self, **kwargs):

        self.word = kwargs.pop('word', None)
Ejemplo n.º 9
0
class ChannelBookCategory(db.Model):
    ''' 渠道书籍分类信息 '''
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    channel_cate_id = db.Column(db.String(20), primary_key=True)  # 分类ID(第三方)
    cate_id = db.Column(db.Integer(), index=True)  # 分类ID

    def __init__(self, channel_cate_id, cate_id):
        self.channel_cate_id = channel_cate_id
        self.cate_id = cate_id
Ejemplo n.º 10
0
class User(db.Model):
    __tablename__ = "core_gkuser"

    id = db.Column(db.Integer(), primary_key=True)
    password = db.Column(db.VARCHAR(128))
    last_login = db.Column(db.DateTime())
    is_superuser = db.Column(db.Boolean())
    email = db.Column(db.VARCHAR(255))

    def __repr__(self):
        return "<User e-Mail %r>" % self.email
Ejemplo n.º 11
0
class Agent(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(), nullable=False)
    last_name = db.Column(db.String(), nullable=False)
    password = db.Column(db.String(120), nullable=False)
    country = db.Column(db.String(), nullable=False)
    email = db.Column(db.String(), nullable=False, unique=True)
    phone_no = db.Column(db.String(), nullable=False)
    gender = db.Column(db.String(), nullable=False)
    date_uploaded = db.Column(db.DateTime,
                              nullable=False,
                              default=datetime.now)
    date_registered = db.Column(db.DateTime,
                                nullable=False,
                                default=datetime.now)
    agent_image_file = db.Column(db.String(20), nullable=False)
    agent_photo_data = db.Column(db.LargeBinary)
    amount_earned = db.Column(db.Integer(), default=0)
    buildings_sold = db.Column(db.Integer(), default=0)
    location = db.Column(db.String())
    client = db.relationship('Client', backref='real_estate', lazy=True)
    apartment = db.relationship('Apartment', backref='broker', lazy=True)
    facebook_name = db.Column(db.String())
    twitter_name = db.Column(db.String())
    confirmed = db.Column(db.Boolean, nullable=False, default=False)

    def get_reset_token(self, expires_sec=1800):
        s = Serializer(app.config['SECRET_KEY'], expires_sec)
        return s.dumps({'agent_id': self.id}).decode('utf-8')

    @staticmethod
    def verify_reset_token(token):
        s = Serializer(app.config['SECRET_KEY'])
        try:
            agent_id = s.loads(token)['agent_id']
        except ValueError:
            return None
        return Agent.query.get(agent_id)

    def __repr__(self):
        return f"User('{self.first_name}', '{self.email}', '{self.confirmed}')"
Ejemplo n.º 12
0
class Image(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    filename = db.Column(db.String(120))
    url = db.Column(db.String(120))
    created = db.Column(db.DateTime(), server_default=func.now())

    def __init__(self, filename):
        self.filename = self.get_filename(filename)

    def get_filename(self, filename):
        tmp = filename.rsplit('.', 1)
        return tmp[0] + '_%s_%s.%s' % (int(
            time.time()), random.randint(10000, 99999), tmp[1])
Ejemplo n.º 13
0
class SearchHistory(BaseModel, TimestampMixin):

    __tablename__               =   'search_history'

    id                          =   db.Column(db.Integer(), primary_key=True)
    user_id                     =   db.Column(db.Integer(), index=True)
    result_count                =   db.Column(db.Integer(), default=0)
    keyword                     =   db.Column(db.VARCHAR(255))
    ip                          =   db.Column(IPAddressType)
    user_agent                  =   db.Column(db.VARCHAR(255))

    # def __repr__(self):
    #     return "<Keyword: {0} from IP {1}>".format(self.keyword, self.ip)


    def __init__(self, *args, **kwargs):
        self.user_id        = kwargs.pop('user_id', None)
        # assert self.user_id is not None
        self.keyword        = kwargs.pop('keyword', None)
        self.ip             = kwargs.pop('ip', None)
        self.user_agent     = kwargs.pop('user_agent', None)
        self.result_count   = kwargs.pop('result_count', 0)
Ejemplo n.º 14
0
class FreeBook(db.Model):
    """外链书籍基本信息"""
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    id = db.Column(db.Integer(), primary_key=True)
    book_id = db.Column(db.Integer(), index=True)  # 书籍ID
    channel_book_id = db.Column(db.String(20), unique=True)  # 渠道书籍id 渠道名:书籍id
    chapter_num = db.Column(db.Integer())  # 章节数量
    status = db.Column(db.Integer())  # 连载状态(1:已完结;2:未完结)
    create_time = db.Column(db.DateTime)  # 创建时间(第三方)
    word_count = db.Column(db.Integer)  # 字数
    update_time = db.Column(db.DateTime)  # 更新时间
    showed = db.Column(db.Boolean(), server_default='0')
    free_source = db.Column(db.String(50), server_default='', index=True)  # 来源
    channel_cate = db.Column(db.String(50), server_default='')  # 渠道方分类名
    last_chapter_name = db.Column(db.String(100), server_default='')  # 最新章节名
    created = db.Column(db.DateTime, server_default=func.now())  # 创建时间

    def get_parse_rule(self):
        """获取解析规则"""
        if self.free_source == 'wudu':
            return '吾读', '//*[@id="acontent"]/text()'
        elif self.free_source == 'dushu88':
            return '88读书', '//*[@id="nr1"]/text()'
        elif self.free_source == 'kanshu':
            return '看书', '//*[@id="chapcont"]/text()'
        return '', ''

    def to_dict(self):
        source_name, parse_rule = self.get_parse_rule()
        return dict(chapter_num=self.chapter_num,
                    status=self.status,
                    create_time=self.create_time.strftime('%Y-%m-%d %H:%M:%S'),
                    word_count=self.word_count,
                    update_time=self.update_time.strftime('%Y-%m-%d %H:%M:%S'),
                    free_source=self.free_source,
                    source=source_name,
                    parse_rule=parse_rule,
                    created=self.created.strftime('%Y-%m-%d %H:%M:%S'))
Ejemplo n.º 15
0
class Article(db.Model):
    __tablename__ = "core_article"
    __bind_key__ = 'article'
    # (remove, draft, published) = xrange(3)
    # ARTICLE_STATUS_CHOICES = [
    #     (published, _("published")),
    #     (draft, _("draft")),
    #     (remove, _("remove")),
    # ]
    # ARTICLE_STATUS_CHOICES = ("remove", "draft","published")

    id = db.Column(db.Integer(), primary_key=True)
    creator_id = db.Column(db.Integer())
    title = db.Column(db.VARCHAR(255))
    # identity_code       = db.Column(db.VARCHAR(255))
    cover = db.Column(db.VARCHAR(255))
    # publish             = db.Column(db.Enum, ARTICLE_STATUS_CHOICES)
    content = db.Column(db.Text())
    created_datetime = db.Column(db.DateTime())
    updated_datetime = db.Column(db.DateTime())
    showcover = db.Column(db.Boolean(), default=False)
    read_count = db.Column(db.Integer(), default=0)
    feed_read_count = db.Column(db.Integer(), default=0)

    def __repr__(self):
        return "<Article %r>" % self.title

    @property
    def strip_content(self):
        html_string = self.content.strip()
        html_string = html_string.strip('\n')
        res = []
        parser = HTMLParser()
        parser.handle_data = res.append
        parser.feed(html_string)
        parser.close()
        content_string = ''.join(res)
        return content_string.encode('utf-8')
Ejemplo n.º 16
0
class UserModel(TrackingModel):
    __table_args__ = dict(schema=config.SCHEMA_NAME, extend_existing=True)
    __tablename__ = "user"

    _id = db.Column(UUID, primary_key=True)
    is_activate = db.Column(db.Boolean())
    status = db.Column(db.Integer())

    username = db.Column(db.String(255))
    password = db.Column(db.String(1023))

    fullname = db.Column(db.String(255))

    gender = db.Column(db.Integer())
    year_of_birth = db.Column(db.Integer())

    contact__phone = db.Column(db.String(15))
    contact__email = db.Column(db.String(255))

    is_verified__phone = db.Column(db.Boolean())
    is_verified__email = db.Column(db.Boolean())

    followers = db.Column(ARRAY(UUID), default=[])
    _etag = db.Column(db.String(255))
Ejemplo n.º 17
0
class BookShelfName(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(100))
    nickname = db.Column(db.String(100))
    updated = db.Column(db.DateTime, server_default=func.now())
    created = db.Column(db.DateTime, server_default=func.now())

    def __init__(self, name, nickname):
        self.name = name
        self.nickname = nickname

    def to_admin_dict(self):
        return dict(id=self.id,
                    name=self.name,
                    nickname=self.nickname,
                    created=self.created.strftime('%Y-%m-%d %H:%M:%S'),
                    updated=self.updated.strftime('%Y-%m-%d %H:%M:%S'))
Ejemplo n.º 18
0
class AdminUser(UserMixin, db.Model):
    """后台用户"""
    id = db.Column(db.Integer(), primary_key=True)
    email = db.Column(db.String(20))
    password = db.Column(db.String(128))
    created = db.Column(db.DateTime(), server_default=func.now())
    group_id = db.Column(db.Integer, server_default='-1')

    def __init__(self, email, password, group_id):
        self.email = email
        self.password = password
        self.group_id = group_id

    def to_admin_dict(self):
        group = AdminUserGroup.query.filter_by(id=self.group_id).first()
        group_name = group.name if group else self.group_id
        return dict(id=self.id,
                    email=self.email,
                    group_id=group_name,
                    created=self.created.strftime('%Y-%m-%d %H:%M:%S'))
Ejemplo n.º 19
0
class BookChapterContent(db.Model):
    ''' 书籍章节内容信息 '''
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    id = db.Column(db.Integer(), primary_key=True)  # ID
    book_id = db.Column(db.Integer)  # 书籍ID
    volume_id = db.Column(db.Integer)  # 卷ID
    chapter_id = db.Column(db.Integer)  # 章节ID
    content = db.Column(MEDIUMTEXT)  # 章节内容
    created = db.Column(db.DateTime, server_default=func.now())  # 创建时间

    db.Index('ix_book_id_chapter_id', book_id, chapter_id)

    def __init__(self, data):
        self.book_id = int(data['book_id'])
        self.volume_id = int(data['volume_id'])
        self.chapter_id = int(data['chapter_id'])
        self.content = data['content'].replace(u' ', '').replace(' ', '')

    def update(self, data):
        self.content = data['content'].replace(u' ', '').replace(' ', '')
Ejemplo n.º 20
0
class BookMark(db.Model):
    ''' 书签 '''
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    id = db.Column(db.Integer(), primary_key=True)  # ID
    user_id = db.Column(db.Integer)  # 用户id
    book_id = db.Column(db.Integer)  # 书籍ID
    volume_id = db.Column(db.Integer)  # 卷ID
    chapter_id = db.Column(db.Integer)  # 章节ID
    params = db.Column(db.String(100))  #客户端字段
    created = db.Column(db.DateTime, server_default=func.now())  # 创建时间

    def to_dict(self):
        return dict(
            id = self.id,
            user_id = self.user_id,
            book_id = self.book_id,
            volume_id = self.volume_id,
            chapter_id = self.chapter_id,
            created = self.created,
            params = self.params
        )
Ejemplo n.º 21
0
class BookShelf(db.Model):
    ''' 书架 '''
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    id = db.Column(db.Integer(), primary_key=True)
    book_id = db.Column(db.Integer(), index=True)  # 书籍ID
    name = db.Column(
        db.String(100))  # 书架名称('myself', 'hot', 'new', 'recommend', 'finish')
    user_id = db.Column(db.Integer())  # 用户id, 用于myself 自己的书架
    ranking = db.Column(db.Integer(), default=0)  # 用于排序
    rate = db.Column(db.Integer(), default=0)  # 阅读进度(百分率分子)
    showed = db.Column(db.Boolean(), default=True)  # 是否显示
    sex = db.Column(db.Integer(), server_default='0')  # 热门和新书需要区分男女频(1:男;2: 女)
    created = db.Column(db.DateTime, server_default=func.now())  # 创建时间
    updated = db.Column(db.DateTime, server_default=func.now())  # 更新时间

    db.Index('ix_book_id_name_user_id', book_id, name, user_id, unique=True)

    def __init__(self, book_id, name, user_id, ranking, rate, showed, sex):
        self.book_id = book_id
        self.name = name
        self.user_id = user_id
        self.ranking = ranking
        self.rate = rate
        self.showed = showed
        self.sex = sex

    def to_admin_dict(self):
        book = Book.query.filter_by(book_id=self.book_id).first()
        return dict(id=self.id,
                    book_id=self.book_id,
                    book=book.to_admin_dict() if book else {},
                    name=self.name,
                    user_id=self.name,
                    ranking=self.ranking,
                    rate=self.rate,
                    showed=int(self.showed) if self.showed else 0,
                    sex=self.sex,
                    created=self.created.strftime('%Y-%m-%d %H:%M:%S'))
Ejemplo n.º 22
0
class User(UserMixin, db.Model):
    """ 用户表 """
    id = db.Column(db.Integer(), primary_key=True)
    phone = db.Column(db.String(20), unique=True)
    password = db.Column(db.String(128))
    nickname = db.Column(db.String(50)) 
    email = db.Column(db.String(20))
    notify_phone = db.Column(db.String(20))  # 接收通知的手机号码, 可以和phone 不一致
    level = db.Column(db.Integer(), default=0)
    avatar = db.Column(db.String(200))
    sex = db.Column(db.Integer(), server_default='0')#1男2女

    platform = db.Column(db.String(20))
    device_id = db.Column(db.String(40), index=True, unique=True)  # 设备id 安卓:mac ios:idfa
    register_ip = db.Column(db.String(20))
    intro = db.Column(db.String(300))  # 个人简介
    aphorism = db.Column(db.String(200))  # 个人签名

    oauth_from = db.Column(db.String(20), server_default='')  # 认证来源 tel_pwd, weibo, wechat, qq
    oauth_openid = db.Column(db.String(128))  # openid, 对于微信, 是unionid(用openid 会导致公众号和手机客户端不一致)
    oauth_userinfo = db.Column(db.Text)  # 来自第三方平台的用户额外信息
    oauth_time = db.Column(db.DateTime())  # 绑定第三方帐号时间
    oauth_nickname = db.Column(db.String(50)) 
    oauth_avatar = db.Column(db.String(200))

    modified = db.Column(db.DateTime(), server_default=func.now())
    created = db.Column(db.DateTime(), server_default=func.now())


    def to_admin_dict(self):
        ub = UserBalance.query.filter_by(user_id=self.id).first()
        balance = ub.balance if ub else 0
        nickname = self.nickname if self.nickname else ''
        if self.oauth_from == 'tel_pwd':
            if self.phone:
                nickname = '%s****%s' %(self.phone[:3], self.phone[-4:])
        sex = u'男' if self.sex == 1 else u'女'
        return dict(
            id = self.id,
            phone = self.phone if self.phone else '',
            nickname = nickname,
            email = self.email if self.email else '',
            notify_phone = self.notify_phone if self.notify_phone else '',
            level  = self.level if self.level else '',
            avatar = self.avatar if self.avatar else 'http://ov2eyt2uw.bkt.clouddn.com/android_pre.jpg',
            platform = self.platform if self.platform else '',
            register_ip = self.register_ip,
            intro = self.intro if self.intro else '',
            aphorism = self.aphorism if self.aphorism else '',
            oauth_from = self.oauth_from if self.oauth_from else '',
            oauth_userinfo = json.loads(self.oauth_userinfo) if self.oauth_userinfo else '',
            balance = balance,
            sex = sex,
            channel_name = self.get_channel_name(),
            created = self.created.strftime('%Y-%m-%d %H:%M:%S')
            )
    
    def to_dict(self):
        return dict(
            id = self.id,
            phone = self.phone if self.phone else '',
            nickname = self.nickname if self.nickname else self.id,
            avatar = self.avatar or 'http://ov2eyt2uw.bkt.clouddn.com/default_avatar.png',
            intro = self.intro if self.intro else '',
            aphorism = self.aphorism if self.aphorism else '',
            notify_phone = self.notify_phone if self.notify_phone else '',
            oauth_openid = self.oauth_openid if self.oauth_openid else '',
            oauth_userinfo = self.oauth_userinfo if self.oauth_userinfo else '',
            oauth_from = self.oauth_from if self.oauth_from else '',
            oauth_time = self.oauth_time.__str__() if self.oauth_time else '',
            oauth_nickname = self.oauth_nickname or '',
            oauth_avatar = self.oauth_avatar or self.avatar or 'http://ov2eyt2uw.bkt.clouddn.com/default_avatar.png',
            sex = self.sex
        )
Ejemplo n.º 23
0
class Role(db.Model, RoleMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))
Ejemplo n.º 24
0
class Publication(FullText, db.Model):
    __tablename__ = 'publication'
    __fulltext_columns__ = (
        'pub_title',
        'pub_authors',
        'pub_abstract',
    )

    __table_args__ = (db.UniqueConstraint('pub_doi',
                                          'pub_pmid',
                                          'pub_pmc',
                                          'pub_arxiv',
                                          'pub_biorxiv',
                                          name='_pub_unique'), )

    # Publication information
    id = db.Column(db.Integer, primary_key=True)
    pub_title = db.Column(db.String(300))
    pub_authors = db.Column(db.String(1000))
    pub_abstract = db.Column(db.Text())
    pub_doi = db.Column(db.String(250))
    pub_pmid = db.Column(db.Integer())
    pub_pmc = db.Column(db.Integer())
    pub_arxiv = db.Column(db.String(25))
    pub_biorxiv = db.Column(db.String(250))
    pub_biorxiv_url = db.Column(db.String(250))
    pub_url = db.Column(db.String(250))
    pub_pdf_url = db.Column(db.String(250))
    pub_journal = db.Column(db.String(100))
    pub_date = db.Column(db.DateTime)
    pub_created_on = db.Column(db.DateTime, default=now)

    pub_thumbnail = db.Column(db.String(THREAD.MAX_LINK), default=None)

    threads = db.relationship('Thread', back_populates='publication')
    downloads = db.relationship('Publication_Download',
                                back_populates='publication')

    @property
    def download_count(self):
        return db.session.query(Publication_Download) \
                         .filter(Publication_Download.publication_id == self.id) \
                         .count()

    @property
    def pub_id(self):
        if self.pub_pmid:
            return self.pub_pmid
        elif self.pub_pmc:
            return f"PMC{self.pub_pmc}"
        elif self.pub_arxiv:
            return f"arxiv-{self.pub_arxiv}"
        elif self.pub_biorxiv:
            return f"biorxiv-{self.pub_biorxiv}"
        else:
            return self.pub_doi

    @validates('pub_title', 'pub_authors', 'pub_abstract', 'pub_journal')
    def truncate(self, key, value):
        max_len = getattr(self.__class__, key).prop.columns[0].type.length
        if value and max_len:
            if len(value) > max_len:
                return value[:max_len]
        return value

    def fetch_abstract(self):
        """
            Used to process text within an abstract
        """
        if self.pub_abstract:
            return linkify(self.pub_abstract)

    def fetch_github_links(self):
        if self.pub_abstract:
            return find_github_links(self.pub_abstract)

    def mark_downloaded(self, user_id):
        """
            Marks a publication as having been downloaded.
        """
        td = Publication_Download(user_id=user_id, publication_id=self.id)
        td, exists = get_or_create(Publication_Download,
                                   user_id=user_id,
                                   publication_id=self.id)

    def has_downloaded(self, user_id):
        """
            Has the user downloaded the PDF?
        """
        rs = Publication_Download.query.filter(
            db.and_(Publication_Download.user_id == user_id,
                    Publication_Download.publication_id == self.id))
        return True if rs.first() else False

    def __repr__(self):
        return '<Publication %r>' % (self.pub_title)
Ejemplo n.º 25
0
class Banner(db.Model):
    """广告表"""
    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(100))
    platform = db.Column(db.String(50))
    activity = db.Column(db.String(50))
    ios_activity = db.Column(db.String(50))
    params = db.Column(
        db.String(150))  # 客户端需要参数,保存字典,暂时需要{'book_id':111, 'book_name': u''}
    sex = db.Column(db.Integer(), default=1)  # 0: 所有 1:男;2: 女
    url = db.Column(db.String(150))
    banner_url = db.Column(db.String(150))
    level = db.Column(db.Integer(), default=0)
    showed = db.Column(db.Boolean(), default=False)
    modified = db.Column(db.DateTime(), server_default=func.now())
    created = db.Column(db.DateTime(), server_default=func.now())
    m_id = db.Column(db.Integer(), server_default='-1')

    def __init__(self, data):
        self.title = data.get('title', '')
        self.platform = data.get('platform', '')
        self.activity = data.get('activity', '')
        self.ios_activity = data.get('ios_activity', '')
        self.params = json.dumps(json.loads(data.get('params',
                                                     json.dumps({}))))
        self.sex = int(data.get('sex', 0))
        self.url = data.get('url', '')
        self.banner_url = data['banner_url']
        self.level = int(data.get('level', 0))
        self.showed = 1 if int(data.get('showed', 0)) else 0
        self.m_id = int(data.get('m_id', -1))

    def update(self, data):
        print data
        self.title = data.get('title', '')
        self.platform = data.get('platform', '')
        self.activity = data.get('activity', '')
        self.ios_activity = data.get('ios_activity', '')
        self.params = json.dumps(json.loads(data.get('params',
                                                     json.dumps({}))))
        self.sex = int(data.get('sex', 0))
        self.url = data.get('url', '')
        self.banner_url = data['banner_url']
        self.level = int(data.get('level', 0))
        self.showed = 1 if int(data.get('showed', 0)) else 0
        self.m_id = int(data.get('m_id', -1))
        self.modified = datetime.now()

    def to_admin_dict(self):
        return dict(id=self.id,
                    title=self.title,
                    platform=self.platform,
                    activity=self.activity,
                    ios_activity=self.ios_activity,
                    params=json.loads(self.params),
                    sex=self.sex,
                    url=self.url,
                    banner_url=self.banner_url,
                    level=self.level,
                    showed=int(self.showed),
                    created=self.created.strftime('%Y-%m-%d %H:%M:%S'),
                    modified=self.modified.strftime('%Y-%m-%d %H:%M:%S'))

    def to_dict(self):
        return dict(id=self.id,
                    title=self.title,
                    platform=self.platform,
                    activity=self.activity,
                    ios_activity=self.ios_activity,
                    params=json.loads(self.params),
                    sex=self.sex,
                    url=self.url,
                    banner_url=self.banner_url,
                    level=self.level)
Ejemplo n.º 26
0
class Book(db.Model):
    ''' 书籍基本信息 '''
    __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}

    book_id = db.Column(db.Integer(), primary_key=True)  # 书籍ID
    channel_book_id = db.Column(db.String(20), unique=True)  # 渠道书籍id 渠道名:书籍id
    book_name = db.Column(db.String(100))  # 书籍名称
    cate_id = db.Column(db.Integer(), index=True)  # 书籍分类ID
    channel_type = db.Column(db.SmallInteger(), index=True)  # 书籍频道(1:男;2: 女 3: 出版 0: 无此属性默认为0)
    author_name = db.Column(db.String(50))  # 作者
    chapter_num = db.Column(db.Integer())  # 章节数量
    is_publish = db.Column(db.Integer())  # 是否出版(1:是;2:否)
    status = db.Column(db.Integer())  # 连载状态(1:已完结;2:未完结)
    create_time = db.Column(db.DateTime)  # 创建时间(第三方)
    cover = db.Column(db.String(300))  # 封面图片(链接)
    intro = db.Column(TEXT)  # 简介
    word_count = db.Column(db.Integer)  # 字数
    update_time = db.Column(db.DateTime)  # 更新时间
    created = db.Column(db.DateTime, server_default=func.now())  # 创建时间
    # add [email protected] 2017-9-12
    showed = db.Column(db.Boolean(), server_default='0')
    source = db.Column(db.String(50), server_default='sina')  # 来源
    
    free_collect = db.Column(db.Boolean(), server_default='0')  # 是否外链小说
    channel_cate = db.Column(db.String(50), server_default='')  # 渠道方分类名
    ranking = db.Column(db.Integer(), server_default='0') #排序

    def to_admin_dict(self):
        cate = BookCategory.query.filter_by(cate_id=self.cate_id).first()
        cate_name = cate.cate_name if cate else str(self.cate_id)
        source = ''
        if self.source == 'sina':
            source = u'新浪阅读'
        elif self.source == 'kaixing':
            source = u'恺兴阅读'
        elif self.source == 'zhangyue':
            source = u'掌阅'
        elif self.source == 'jingyu':
            source = u'鲸鱼阅读'
        elif self.source == 'anzhi':
            source = u'安之'
        elif self.source == 'riyue':
            source = u'日月中文网'
        else:
            source = self.source
        return dict(
                    book_id = self.book_id,
                    channel_book_id = self.channel_book_id,
                    book_name = self.book_name,
                    cate_id = cate_name,
                    channel_type = self.channel_type,
                    author_name = self.author_name,
                    chapter_num = self.chapter_num,
                    is_publish = self.is_publish,
                    status = self.status,
                    create_time = self.create_time.strftime('%Y-%m-%d %H:%M:%S'),
                    cover = self.cover if self.cover else 'https://ssl.kdyoushu.com/default_free_book_cover.jpg',
                    intro = self.intro if self.intro else '',
                    word_count = self.word_count,
                    update_time = self.update_time.strftime('%Y-%m-%d %H:%M:%S'),
                    created = self.created.strftime('%Y-%m-%d %H:%M:%S'),
                    showed = int(self.showed),
                    source = source)

    def __init__(self, data):
        self.channel_book_id = data['channel_book_id']
        self.book_name = data['book_name']
        self.cate_id = int(data['cate_id'])
        self.channel_type = int(data['channel_type'])
        self.author_name = data['author_name']
        self.chapter_num = data['chapter_num']
        self.is_publish = data['is_publish']
        self.status = data['status']
        self.create_time = data['create_time']
        self.cover = data['cover']
        self.intro = data['intro']
        self.word_count = int(data['word_count'])
        self.update_time = data['update_time']
        self.source = data['source']
        self.created = datetime.now()

    def update(self, data):
        self.book_name = data['book_name']
        self.cate_id = int(data['cate_id'])
        self.channel_type = int(data['channel_type'])
        self.author_name = data['author_name']
        self.chapter_num = data['chapter_num']
        self.is_publish = data['is_publish']
        self.status = data['status']
        self.create_time = data['create_time']
        self.cover = data['cover']
        self.intro = data['intro']
        self.word_count = int(data['word_count'])
        self.update_time = data['update_time']
        self.ranking = data['ranking']

    def to_dict(self):
        source = ''
        if self.source == 'sina':
            source = u'新浪阅读'
        elif self.source == 'kaixing':
            source = u'恺兴阅读'
        elif self.source == 'zhangyue':
            source = u'掌阅'
        elif self.source == 'jingyu':
            source = u'鲸鱼阅读'
        elif self.source == 'anzhi':
            source = u'安之'
        else:
            source = self.source

        return dict(book_id=self.book_id,
                    book_name=self.book_name,
                    cate_id=self.cate_id,
                    channel_type=self.channel_type,
                    author_name=self.author_name,
                    chapter_num=self.chapter_num,
                    is_publish=self.is_publish,
                    status=self.status,
                    create_time=self.create_time.strftime('%Y-%m-%d %H:%M:%S'),
                    cover=self.cover,
                    intro=self.intro,
                    word_count=self.word_count,
                    source=source,
                    update_time=self.update_time.strftime('%Y-%m-%d %H:%M:%S'),
                    free_collect=1 if self.free_collect else 0,
                    created=self.created.strftime('%Y-%m-%d %H:%M:%S'))