Beispiel #1
0
class State(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    state = db.Column(db.TEXT())
    last_lang = db.Column(db.TEXT())
    task_id = db.Column(db.TEXT(), default=None)
    created_at = db.Column(db.DateTime, index=True, default=datetime.utcnow)

    def __repr__(self):
        return 'State {id}, State {state}'.format(id=self.id, state=self.state)
Beispiel #2
0
class Work(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), unique=True)
    dev = db.Column(db.String(64))
    audit = db.Column(db.String(64))
    srole = db.Column(db.Integer, default=0)
    sql_content = db.Column(db.TEXT(16777215))
    db_config = db.Column(db.String(64))
    backup = db.Column(db.Boolean, default=True)
    status = db.Column(db.Integer, nullable=False)
    create_time = db.Column(db.DateTime, default=datetime.now())
    finish_time = db.Column(db.DateTime)
    man_review_time = db.Column(db.DateTime)
    auto_review = db.Column(db.TEXT(16777215))
    execute_result = db.Column(db.TEXT(16777215))
Beispiel #3
0
class Invoice(db.Model):
    __tablename__ = 'invoice'

    id = db.Column('id', db.String(128), primary_key=True, nullable=False)
    to_name = db.Column('to_name', db.String(128), nullable=False)
    to_address = db.Column('to_address', db.String(128), nullable=False)
    to_city_state = db.Column('to_city_state', db.String(128), nullable=False)
    from_name = db.Column('from_name', db.String(128), nullable=False)
    from_address = db.Column('from_address', db.String(128), nullable=False)
    from_city_state = db.Column('from_city_state',
                                db.String(128),
                                nullable=False)
    items = db.Column('items', db.TEXT(), nullable=False)
    payment_method = db.Column('payment_method',
                               db.String(128),
                               nullable=False)
    payment_email = db.Column('payment_email', db.String(256), nullable=False)
    warranty_description = db.Column('warranty_description',
                                     db.Text(),
                                     nullable=False)
    warranty_period = db.Column('warranty_period',
                                db.String(128),
                                nullable=False)
    notes_description = db.Column('notes_description',
                                  db.Text(),
                                  nullable=True)
    issued_date = db.Column('issued_date', db.Date(), nullable=False)
    type = db.Column('type', db.String(64), nullable=False, default="Quote")
    total = db.Column('total', db.Integer(), nullable=False)
    hidden = db.Column('hidden', db.Boolean(), nullable=False, default=False)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
Beispiel #4
0
class adminUserList(db.Model):
    __tablename__ = "adminUserList"
    id = db.Column(db.Integer, primary_key=True,unique=True,comment='id')
    user_name=db.Column(db.String(100),comment='用户名')
    name = db.Column(db.String(100),comment='名字')
    pwd=db.Column(db.String(200),comment='密码')
    sex=db.Column(db.INT,comment='性别')#0男 1女 2保密
    email = db.Column(db.String(100), unique=True,comment='邮箱')  # 邮箱 唯一
    phone = db.Column(db.String(11), unique=True,comment='电话')  # 手机号码 唯一
    avatar=db.Column(db.TEXT(length=6553666),comment='头像') #65536设置的mysql表字段为mediumblob 可存储16M的blob
    reg_time=db.Column(db.DateTime,index=True, default=datetime.now,comment='注册时间')

    def to_json(self):
        '''返回给前端的字段'''
        return {
            'id': self.id,
            'userName': self.user_name,
            'name':self.name,
            'sex':self.sex,
            'email':self.email,
            'phone':self.phone,
            'avatar':self.avatar,
            'createTime': str(self.reg_time),
        }
    def verify_password(self, password):
        pwdMd5 = md5(password)
        if self.pwd == pwdMd5:
            print('MD5加密之后的密文比较', self.pwd, pwdMd5)
            return True
        else:
            return False
Beispiel #5
0
class Tipster(db.Model):
    __tablename__ = "TipsterPerformance"
    ID = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String(40))
    TipsterScore = db.Column(db.Float) 
    NumberWinners = db.Column(db.Integer)
    Seconds = db.Column(db.Integer)
    Thirds = db.Column(db.Integer)
    Fourths = db.Column(db.Integer)
    TotalRaces = db.Column(db.Integer)
    WinStrikeRate = db.Column(db.Float)
    NumberFavorites = db.Column(db.Integer)
    PerformanceSequence = db.Column(db.TEXT())
    MaxLosingStreak = db.Column(db.Integer)
    MinWinningStreak = db.Column(db.Integer)
    Last10 = db.Column(db.String(40))

    def __init__(self, Name, TipsterScore, NumberWinners, Seconds, Thirds, Fourths, TotalRaces, WinStrikeRate, NumberFavorites,
        PerformanceSequence, MaxLosingStreak, MinWinningStreak, Last10):
        self.Name = Name
        self.TipsterScore = TipsterScore
        self.NumberWinners = NumberWinners
        self.Seconds = Seconds
        self.Thirds = Thirds
        self.Fourths = Fourths
        self.TotalRaces = TotalRaces
        self.WinStrikeRate = WinStrikeRate
        self.NumberFavorites = NumberFavorites
        self.PerformanceSequence = PerformanceSequence
        self.MaxLosingStreak = MaxLosingStreak
        self.MinWinningStreak = MinWinningStreak
        self.Last10 = Last10
        
Beispiel #6
0
class User(db.Model):
    __tablename__ = 'users'
    uid = db.Column(db.INT, primary_key=True)
    email = db.Column(db.VARCHAR(256))
    password = db.Column(db.VARCHAR(256))
    name = db.Column(db.VARCHAR(256))
    realname = db.Column(db.VARCHAR(256))
    portrait = db.Column(db.VARCHAR(256))
    permit = db.Column(db.INT, default=1)
    gender = db.Column(db.INT)
    age = db.Column(db.INT)
    school = db.Column(db.VARCHAR(256))
    selfinfo = db.Column(db.TEXT(65536))
    regtime = db.Column(db.DATETIME, default=datetime.utcnow)
    totshare = db.Column(db.INT, default=0)
    totques = db.Column(db.INT, default=0)
    totans = db.Column(db.INT, default=0)
    """
    Follower = db.relationship("Follow" , foreign_keys=[Follow.FollewerUID],
                               back_populates="FollewerUID")
    Following = db.relationship("Follow",foreign_keys=[Follow.FollowedUID],
                             back_populates="FollowedUID")
    """
    def __init__(self, login):
        self.LOGIN = login

    def to_dict(self):
        return {
            c.name: getattr(self, c.name, None)
            for c in self.__table__.columns
        }
Beispiel #7
0
class Session(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    requests = db.relationship('Request', backref='session', lazy='dynamic')
    confirmation_number = db.Column(db.String(256))
    department = db.Column(db.TEXT())
    created_at = db.Column(db.DateTime, index=True, default=datetime.utcnow)

    def __repr__(self):
        return 'Session {id}, User ID {user_id}'.format(id=self.id,
                                                        user_id=self.user_id)

    @property
    def serialize(self):
        """Return object data in easily serializable format"""
        return {
            'id': self.id,
            'confirmation_number': self.confirmation_number,
            'department': self.department,
            'created_at': dump_datetime(self.created_at),
            'requests': self.serialize_requests
        }

    @property
    def serialize_requests(self):
        """
        Return object's relations in easily serializable format.
        NB! Calls many2many's serialize property.
        """
        return [item.serialize for item in self.requests]
Beispiel #8
0
class Player(db.Model):
    __tablename__ = "players"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(100))
    country = db.Column(db.String(100))
    position = db.Column(db.String(1))
    height = db.Column(db.Float(precision=2, asdecimal=False))
    weight = db.Column(db.Integer())
    picture = db.Column(db.String(300), nullable=True)
    feature = db.Column(db.TEXT(1000), nullable=True)
    default_leg = db.Column(db.String(34), nullable=True)
    birth_date = db.Column(db.DateTime)
    activate = db.Column(db.Boolean, unique=False, default=True)
    teams = db.relationship('Team', secondary='teams_players')

    def __init__(self, name, country, position, height, weight, picture,
                 feature, default_leg, birth_date):
        self.name = name
        self.country = country
        self.position = position
        self.height = height
        self.weight = weight
        self.picture = picture
        self.feature = feature
        self.default_leg = default_leg
        self.birth_date = birth_date

    def __repr__(self):
        return "<Player %r>" % self.name
Beispiel #9
0
class User(db.Model):
    id = db.Column(db.String(200), primary_key=True)
    email = db.Column(db.String(150), nullable=False, unique=True)
    first_name = db.Column(db.String(150), nullable=False)
    last_name = db.Column(db.String(150), nullable=True)
    username = db.Column(db.String(150), nullable=False)
    password = db.Column(db.String(150), nullable=False)
    last_passwords = db.Column(db.TEXT(), nullable=True)
    created_on = db.Column(db.DateTime, nullable=False)
    expiry_token = db.Column(db.String(50), nullable=True)
    expiry_date = db.Column(db.DateTime, nullable=True)
    sso = db.Column(db.Boolean, nullable=True)
    locked = db.Column(db.Boolean, nullable=True)
    provider = db.Column(db.String(50), nullable=True)
    profile_picture = db.Column(LONGTEXT())
    last_login = db.Column(db.DateTime)
    extra_data = db.Column(db.TEXT())
    gender = db.Column(db.String(10), nullable=True)
    country = db.Column(db.String(100), nullable=True)

    def to_dict(self):
        fields = {}
        for field in [
                x for x in dir(self)
                if not x.startswith("_") and x != 'metadata'
        ]:
            data = self.__getattribute__(field)
            if type(data) is datetime.datetime:
                data = data.strftime('%Y-%m-%dT%H:%M:%SZ')
            if type(data) is datetime.date:
                data = data.strftime('%Y-%m-%d')
            if not hasattr(data, '__call__'):
                try:
                    json.dumps(data)
                    if field[-4:] == "List" and type(data) is not list:
                        fields[field] = [
                            x for x in data.split(",") if x.strip() != ""
                        ]
                    else:
                        fields[field] = data
                except TypeError:
                    if type(data) is decimal.Decimal:
                        fields[field] = float(data)
                    else:
                        fields[field] = None
        return fields
Beispiel #10
0
class Answer(db.Model):
    __tablename__ = 'answer'
    aid = db.Column(db.INT, primary_key=True)
    qid = db.Column(db.INT, db.ForeignKey('question.qid'))
    writeruid = db.Column(db.INT, db.ForeignKey('users.id'))
    content = db.Column(db.TEXT(65535))
    pubtime = db.Column(db.DATETIME, default=datetime.utcnow)
    like = db.Column(db.INT, default=0)
Beispiel #11
0
class Page(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))
    price = db.Column(db.Float)
    html = db.Column(db.TEXT(collation='utf8mb4_unicode_ci'))
    listing_id = db.Column(db.Integer, db.ForeignKey('listing.id'))
    timestamp = db.Column(db.DateTime,
                          index=True,
                          default=datetime.datetime.utcnow)
Beispiel #12
0
class Reviews(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    location = db.Column(db.Integer, db.ForeignKey('location.id'))
    user = db.Column(db.Integer, db.ForeignKey('user.id'))
    rating = db.Column(db.Integer, nullable=False)
    review = db.Column(db.TEXT())

    # Method to debug by printing out results of creation when calling the object alone
    def __repr__(self):
        return 'ID: {}, Location: {}, User: {}, Rating: {}, Review: {}'.format(self.id, self.location, self.user,
                                                                               self.rating, self.review)
Beispiel #13
0
class Story(db.Model):
    __tablename__ = 'storys'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    text = db.Column(db.TEXT(16777215))

    annotations = db.relationship('Annotation', backref='story')

    def __repr__(self):
        return '<Book %r>' % self.name
Beispiel #14
0
class Comment(db.Model):
    __tablename__ = 'comment'
    cid = db.Column(db.INT, primary_key=True)
    sid = db.Column(db.INT, db.ForeignKey('share.sid'))
    writerid = db.Column(db.INT, db.ForeignKey('users.uid'))
    content = db.Column(db.TEXT(65536))
    pubtime = db.Column(db.DATETIME, default=datetime.utcnow)

    def to_dict(self):
        return {
            c.name: getattr(self, c.name, None)
            for c in self.__table__.columns
        }
Beispiel #15
0
class Noteevents(db.Model):
    row_id = db.Column(db.Integer, primary_key=True, nullable=False)
    subject_id = db.Column(db.Integer, nullable=False)
    hadm_id = db.Column(db.Integer)
    chartdate = db.Column(db.TIMESTAMP())
    charttime = db.Column(db.TIMESTAMP())
    storetime = db.Column(db.TIMESTAMP())
    category = db.Column(db.VARCHAR(length=50))
    description = db.Column(db.VARCHAR(length=255))
    cgid = db.Column(db.Integer)
    iserror = db.Column(db.CHAR(length=1))
    text = db.Column(db.TEXT())
    admissions = db.relationship('Admissions', backref='noteevents', lazy=True)
class Items(db.Model):
    """This class represents the Items table."""
    __tablename__ = "Items"
    postedDate = db.Column(db.DATE())
    itemID = db.Column(db.Integer, primary_key=True)
    buyerID = db.Column(db.Integer)
    userID = db.Column(db.Integer,
                       db.ForeignKey('Users.userID'),
                       primary_key=True)
    name = db.Column(db.VARCHAR(100))
    category = db.Column(db.VARCHAR(100))
    cost = db.Column(db.Integer)
    description = db.Column(db.TEXT())
    sold = db.Column(db.BOOLEAN)
Beispiel #17
0
class Question(db.Model):
    __tablename__ = 'question'

    qid = db.Column(db.INT, primary_key=True)
    label = db.Column(db.VARCHAR(256))
    content = db.Column(db.TEXT(65536))
    writeruid = db.Column(db.INT, db.ForeignKey('users.uid'))
    newnum = db.Column(db.INT)

    def to_dict(self):
        return {
            c.name: getattr(self, c.name, None)
            for c in self.__table__.columns
        }
Beispiel #18
0
class Share(db.Model):
    __tablename__ = 'share'
    sid = db.Column(db.INT, primary_key=True)
    writeruid = db.Column(db.INT, db.ForeignKey('users.uid'))
    label = db.Column(db.VARCHAR(256))
    image = db.Column(db.VARCHAR(256))
    content = db.Column(db.TEXT(65536))
    pubtime = db.Column(db.DATETIME, default=datetime.utcnow)
    newnum = db.Column(db.INT, default=0)
    star = db.Column(db.INT, default=0)

    def to_dict(self):
        return {
            c.name: getattr(self, c.name, None)
            for c in self.__table__.columns
        }
Beispiel #19
0
class Question(db.Model):
    __tablename__ = 'question'

    qid = db.Column(db.INT, primary_key=True)
    writeruid = db.Column(db.INT, db.ForeignKey('users.id'))
    label = db.Column(db.VARCHAR(255))
    content = db.Column(db.TEXT(65535))
    newnum = db.Column(db.INT)
    answers = db.relationship('Answer', backref='question')
    pubtime = db.Column(db.DATETIME, default=datetime.utcnow)

    def to_dict(self):
        return {
            c.name: getattr(self, c.name, None)
            for c in self.__table__.columns
        }
Beispiel #20
0
class Cfg_settings(db.Model):
    __tablename__ = "cfg_settings"

    key = db.Column(db.String(512), index=True, primary_key=True)
    date_created = db.Column(db.DateTime(timezone=True), default=db.func.current_timestamp())
    date_modified = db.Column(db.DateTime(timezone=True), default=db.func.current_timestamp(),
                              onupdate=db.func.current_timestamp())
    public = db.Column(db.Boolean, index=True, default=True)
    value = db.Column(db.TEXT())
    description = db.Column(db.String(512))

    def to_dict(self):
        return dict(
            date_created=self.date_created.isoformat(),
            date_modified=self.date_modified.isoformat(),
            key=self.key,
            value=self.value,
            description=self.description
        )

    def __repr__(self):
        return '<Cfg_settings %s>' % (self.key)

    @staticmethod
    def get_private_setting(key):
        try:
            setting = db.session.query(Cfg_settings).filter(Cfg_settings.public == False).filter(
                Cfg_settings.key == key).first()
            return setting.value if setting else None
        except:
            return None

    @staticmethod
    def get_setting(key):
        try:
            setting = db.session.query(Cfg_settings).filter(Cfg_settings.key == key).first()
            return setting.value if setting else None
        except:
            return None

    @staticmethod
    def get_settings(key_like):
        try:
            return db.session.query(Cfg_settings).filter(Cfg_settings.key.like(key_like)).all()
        except:
            return None
Beispiel #21
0
class Post(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    title = db.column(db.String(140), nullable=False)
    slug = db.column(db.String(140), unique=True)
    body = db.column(db.TEXT(), nullable=False)
    created = db.column(db.DateTime(), nullable=False)

    def __init__(self, *args, **kwargs):
        super(Post, self).__init__(*args, **kwargs)
        self.generate_slug()

    def generate_slug(self):
        if self.title:
            self.slug = slugify(self.title)

    def __repr__(self):
        return f'<Post id is {self.id}, title is {self.title}>'
Beispiel #22
0
class Share(db.Model):
    __tablename__ = 'share'
    sid = db.Column(db.INT, primary_key=True)
    writeruid = db.Column(db.INT, db.ForeignKey('users.id'))
    label = db.Column(db.VARCHAR(255))
    image = db.Column(db.VARCHAR(255), default="/static/share_images/1.png")
    content = db.Column(db.TEXT(65535))
    pubtime = db.Column(db.DATETIME, default=datetime.utcnow)
    newnum = db.Column(db.INT, default=0)
    like = db.Column(db.INT, default=0)
    comments = db.relationship('Comment', backref='share')

    def to_dict(self):
        return {
            c.name: getattr(self, c.name, None)
            for c in self.__table__.columns
        }
Beispiel #23
0
class Request(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    session_id = db.Column(db.Integer, db.ForeignKey('session.id'))
    request = db.Column(db.TEXT())
    created_at = db.Column(db.DateTime, index=True, default=datetime.utcnow)

    def __repr__(self):
        return 'Request {id}, Text {request}'.format(id=self.id,
                                                     request=self.request)

    @property
    def serialize(self):
        """Return object data in easily serializable format"""
        return {
            'id': self.id,
            'request': self.request,
            'created_at': dump_datetime(self.created_at)
        }
Beispiel #24
0
class Post(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(140), nullable=False)
    slug = db.Column(db.String(140), nullable=False, unique=True)
    body = db.Column(db.TEXT(), nullable=False)
    created = db.Column(db.DateTime(), default=datetime.now())

    def __init__(self, *args, **kwargs):
        super(Post, self).__init__(*args, **kwargs)
        self.generate_slug()

    tags = db.relationship('Tag',
                           secondary=post_tags,
                           backref=db.backref('posts', lazy='dynamic'))

    def generate_slug(self):
        if self.title:
            self.slug = slugify(self.title)

    def __repr__(self):
        return f'<Post id is {self.id}, title is {self.title}>'
Beispiel #25
0
class Maintenance(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    provider_maintenance_id = db.Column(db.String(128), nullable=True)
    start = db.Column(db.TIME)
    end = db.Column(db.TIME)
    timezone = db.Column(db.String(128), nullable=True)
    cancelled = db.Column(db.INT, default=0)
    rescheduled = db.Column(db.INT, default=0)
    rescheduled_id = db.Column(db.Integer,
                               db.ForeignKey('maintenance.id'),
                               nullable=True)
    location = db.Column(db.String(2048), index=True, nullable=True)
    reason = db.Column(db.TEXT(), nullable=True)
    received_dt = db.Column(db.DateTime)
    started = db.Column(db.INT, default=0)
    ended = db.Column(db.INT, default=0)
    updates = db.relationship('MaintUpdate',
                              backref='maintenance',
                              lazy='dynamic')

    def __repr__(self):
        return f'<Maintenance {self.provider_maintenance_id}>'
Beispiel #26
0
class Todo(db.Model):

    id = db.Column(db.String(200), primary_key=True)
    title = db.Column(db.String(50), nullable=False)
    user_id = db.Column(db.String(200))
    content = db.Column(db.TEXT(), nullable=True)
    status = db.Column(db.Boolean, nullable=True)
    created_on = db.Column(db.DateTime)
    alarm_time = db.Column(db.DateTime, nullable=True)

    def to_dict(self):
        fields = {}
        for field in [
                x for x in dir(self)
                if not x.startswith("_") and x != 'metadata'
        ]:
            data = self.__getattribute__(field)
            if type(data) is datetime.datetime:
                data = data.strftime('%Y-%m-%dT%H:%M:%SZ')
            if type(data) is datetime.date:
                data = data.strftime('%Y-%m-%d')
            if not hasattr(data, '__call__'):
                try:
                    json.dumps(data)
                    if field[-4:] == "List" and type(data) is not list:
                        fields[field] = [
                            x for x in data.split(",") if x.strip() != ""
                        ]
                    else:
                        fields[field] = data
                except TypeError:
                    if type(data) is decimal.Decimal:
                        fields[field] = float(data)
                    else:
                        fields[field] = None
        return fields
Beispiel #27
0
class t_SystemPerformance(db.Model):
    __tablename__ = "t_systemperformance"
    id = db.Column(db.Integer, primary_key=True)
    t_system_id= db.Column(db.Integer, ForeignKey('t_system.id'))
    tipsterscore = db.Column(db.Float) 
    winners = db.Column(db.Integer)
    seconds = db.Column(db.Integer)
    thirds = db.Column(db.Integer)
    fourths = db.Column(db.Integer)
    totalraces = db.Column(db.Integer)
    winsr = db.Column(db.Float)
    favorites = db.Column(db.Integer)
    perf_seq = db.Column(db.TEXT())
    maxlosingstreak = db.Column(db.Integer)
    maxwinningstreak = db.Column(db.Integer)
    last10 = db.Column(db.String(40))
    updated = db.Column(db.TIMESTAMP)
    updated_date = db.Column(db.Date)

    def __init__(self, t_system_id, tipsterscore, winners, seconds, thirds, fourths, totalraces, winsr, favorites,
        perf_seq, maxlosingstreak, maxwinningstreak, last10, updated=datetime.utcnow()):
        self.t_system_id = t_system_id
        self.tipsterscore = tipsterscore
        self.winners = winners
        self.seconds = seconds
        self.thirds = thirds
        self.fourths = fourths
        self.totalraces = totalraces
        self.winsr = winsr
        self.favorites = favorites
        self.perf_seq = perf_seq
        self.maxlosingstreak = maxlosingstreak
        self.maxwinningstreak = maxwinningstreak
        self.last10 = last10
        self.updated = updated
        self.updated_date = updated.date()
Beispiel #28
0
class MaintUpdate(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    maintenance_id = db.Column(db.Integer, db.ForeignKey('maintenance.id'))
    comment = db.Column(db.TEXT())
    updated = db.Column(db.DateTime, default=datetime.utcnow)
Beispiel #29
0
class User(UserMixin, db.Model):
    __tablename__ = 'users'

    id = db.Column(db.INT, primary_key=True)
    email = db.Column(db.VARCHAR(255))
    password = db.Column(db.VARCHAR(512))
    confirmed = db.Column(db.BOOLEAN, default=False)
    username = db.Column(db.VARCHAR(255))
    realname = db.Column(db.VARCHAR(255))
    has_img = db.Column(db.INT, default=0)
    portrait = db.Column(db.VARCHAR(255))
    permit = db.Column(db.INT, default=1)
    gender = db.Column(db.INT)
    age = db.Column(db.INT)
    school = db.Column(db.VARCHAR(255))
    selfinfo = db.Column(db.TEXT(65535))
    regtime = db.Column(db.DATETIME, default=datetime.utcnow)
    totshare = db.Column(db.INT, default=0)
    totques = db.Column(db.INT, default=0)
    totans = db.Column(db.INT, default=0)
    has_img = db.Column(db.BOOLEAN, default=0)

    shares = db.relationship('Share', backref='writer')
    questions = db.relationship('Question', backref='writer')
    comments = db.relationship('Comment', backref='writer')
    answers = db.relationship('Answer', backref='writer')

    followed = db.relationship('Follow',
                               foreign_keys=[Follow.follower_id],
                               backref=db.backref('follower', lazy='joined'),
                               lazy='dynamic',
                               cascade='all, delete-orphan')
    followers = db.relationship('Follow',
                                foreign_keys=[Follow.followed_id],
                                backref=db.backref('followed', lazy='joined'),
                                lazy='dynamic',
                                cascade='all, delete-orphan')

    def to_dict(self):
        return {
            c.name: getattr(self, c.name, None)
            for c in self.__table__.columns
        }

    def generate_password(self, pwd):
        self.password = generate_password_hash(pwd)

    def verify_password(self, pwd):
        return check_password_hash(self.password, pwd)

    def generate_confirmation_token(self):
        s = Serializer(app.config['SECRET_KEY'], expires_in=3600)
        token = s.dumps({'uid': self.id})
        print(token)
        return token

    def confirm(self, token):
        s = Serializer(app.config['SECRET_KEY'], expires_in=3600)
        token = token[2:-1]
        print(token)
        try:
            data = s.loads(token)
        except:
            print('datafalse')
            return False
        if data.get('uid') != self.id:
            return False
        self.confirmed = True
        db.session.add(self)
        db.session.commit()
        return True

    def follow(self, user):
        if not self.is_following(user):
            f = Follow(follower=self, followed=user)
            db.session.add(f)

    def unfollow(self, user):
        f = self.followed.filter_by(followed_id=user.id).first()
        if f:
            db.session.delete(f)

    def is_following(self, user):
        if user.id is None:
            return False
        return self.followed.filter_by(followed_id=user.id).first() is not None

    def is_followed_by(self, user):
        if user.id is None:
            return False
        return self.followers.filter_by(
            follower_id=user.id).first() is not None

    def __repr__(self):
        return '<User %r>' % self.username
Beispiel #30
0
class user(db.Model,UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.VARCHAR(64),unique=True)
    location = db.Column(db.String(64))
    image_hash = db.Column(db.String(32))
    about_me = db.Column(db.TEXT())
    register_time = db.Column(db.DateTime(),default=datetime.now)
    last_time = db.Column(db.DateTime(),default=datetime.now)
    email = db.Column(db.VARCHAR(64),unique=True)
    new_email = db.Column(db.VARCHAR(64),default="nomail")
    password_hash = db.Column(db.String(128))
    confirmed = db.Column(db.BOOLEAN, default=False)
    role_id = db.Column(db.Integer,db.ForeignKey("roles.id"))
    posts = db.relationship("Post", backref = "user", lazy = 'dynamic')
    followers = db.relationship("follow",
                                foreign_keys = [follow.follower_id],
                                backref = db.backref("follower", lazy = 'joined'),
                                lazy = 'dynamic',
                                cascade='all, delete-orphan')
    followeds = db.relationship("follow",
                                foreign_keys = [follow.followed_id],
                                backref = db.backref("followed",lazy='joined'),
                                lazy = 'dynamic',
                                cascade='all, delete-orphan')
    comments = db.relationship("Comment", backref = "user",lazy = "dynamic")

    def __init__(self, **kwargs):
        super(user, self).__init__(**kwargs)
        if self.role is None:
            if self.email == current_app.config["MAIL_USERNAME"]:
                self.role = role.query.filter_by(permission = 0xff).first()
            else:
                self.role = role.query.filter_by(default = True).first()

        if self.email is not None and self.image_hash is None:
            self.image_hash = hashlib.md5(self.email.encode("utf-8")).hexdigest()

        self.follow(self)

    def can(self,permissions):
        return self.role is not None and (self.role.permission & permissions == permissions)

    def is_administer(self):
        return self.can(Permission.ADMINISTER)

    def visted(self):
        self.last_time = datetime.now()
        db.session.add(self)
        db.session.commit()

    def follow(self, tmpuser):
        if not self.is_following(tmpuser):
            f = follow(follower = self, followed = tmpuser)
            db.session.add(f)

    def unfollow(self, tmpuser):
        if self.is_following(tmpuser):
            f = self.followers.filter_by(followed_id = tmpuser.id).first()
            db.session.delete(f)


    def is_following(self,tmpuser):
        return self.followers.filter_by(followed_id = tmpuser.id).first() is not None

    def is_followed_by(self,tmpuser):
        return self.followeds.filter_by(follower_id = tmpuser.id).first() is not None

    @property
    def password(self):
        return AttributeError("password can not readable")

    @property
    def get_followed_posts(self):
        return Post.query.join(follow, follow.followed_id == Post.user_id).filter(follow.follower_id == self.id)

    @password.setter
    def password(self,password):
        self.password_hash = generate_password_hash(password)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def generator_confirmed_token(self, expire = 3600, email = ""):
        secret = JsonSecret(current_app.config["SECRET_KEY"], expire)
        if email == "":
            return secret.dumps({"confirmed":self.id})
        else:
            return secret.dumps({"new_email":email})

    def  get_image_url(self, size = 100, default = "monsterid", rating = "g"):
        if request.is_secure:
            url = "https://secure.gravatar.com/avatar"
        else:
            url = "https://gravatar.com/avatar"
        hash = self.image_hash or hashlib.md5(self.email.encode('utf-8')).hexdigest()
        return '{url}/{hash}?s={size}&d={default}&r={rating}'.format(
            url = url, hash = hash,size = size, default = default, rating = rating)

    def confirmed_email(self, token):
        secret = JsonSecret(current_app.config["SECRET_KEY"])
        try:
            data = secret.loads(token)
        except:
            return False
        if data.get("confirmed") == self.id:
            self.confirmed = True
            db.session.add(self)
            return True
        elif data.get("new_email") == self.new_email:
            self.email = self.new_email
            self.image_hash = hashlib.md5(self.email.encode('utf-8')).hexdigest()
            self.new_email = "nomail"
            db.session.add(self)
            return True
        else:
            return False

    @staticmethod
    def generate_fake(count = 100):
        from sqlalchemy.exc import IntegrityError
        from random import seed
        import forgery_py

        seed()
        for i in range(count):
            email = forgery_py.internet.email_address()
            if user.query.filter_by(email = email).first():
                continue
            username = forgery_py.internet.user_name()
            if user.query.filter_by(username = username).first():
                continue
            u = user(email = email,
                     username = username,
                     password = forgery_py.lorem_ipsum.word(),
                     confirmed = True,
                     location = forgery_py.address.city(),
                     about_me = forgery_py.lorem_ipsum.sentence(),
                     last_time = forgery_py.date.date(True))
            db.session.add(u)
            db.session.commit()


    @staticmethod
    def add_self_followed():
        for tmpuser in user.query.all():
            if not tmpuser.is_following(tmpuser):
                tmpuser.follow(tmpuser)
                db.session.add(tmpuser)
                db.session.commit()