Beispiel #1
0
class Section(db.Model):
    '''
    name is used by url, must be a-zA-Z0-9-
    title is utf-8 characters
    '''
    __tablename__ = "section"

    query_class = SectionQuery

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    title = db.Column(db.String(200), nullable=False)
    descp = db.Column(db.Text, nullable=True)
    avatar = db.Column(db.String(200), nullable=True)
    title_alternative = db.Column(db.String(200), nullable=True)
    header = db.Column(db.Text, nullable=True)
    footer = db.Column(db.Text, nullable=True)
    node_count = db.Column(db.Integer, default=0)
    topic_count = db.Column(db.Integer, default=0)
    reply_count = db.Column(db.Integer, default=0)
    #created = db.Column(db.DateTime, nullable=True, default=func.now())
    #last_modified = db.Column(db.DateTime, nullable=True, onupdate=datetime.datetime.now)
    created = db.Column(db.DateTime, nullable=True)
    last_modified = db.Column(db.DateTime, nullable=True)
    sort_order = db.Column(db.Integer, default=1)

    def __unicode__(self):
        return self.title
Beispiel #2
0
class Node(db.Model):
    '''node_type: 0  public plaza
                  1  public club, anybody can join without permission except people who is in blacklist
                  2  private club, one can join with permission or invitation
                  3 secret club, anybody cannot see secret club except members
    '''
    __tablename__ = "node"

    query_class = NodeQuery

    id = db.Column(db.Integer, primary_key=True)
    section_id = db.Column(db.Integer,
                           ForeignKey('section.id'),
                           nullable=False)
    section = relationship("Section", backref="nodes")

    members = db.Column(db.Integer, default=0)
    follows = db.Column(db.Integer, default=0)
    node_type = db.Column(db.Integer, default=0)
    status = db.Column(db.Integer, default=0)

    name = db.Column(db.String(30), nullable=False)
    title = db.Column(db.String(60), nullable=False, index=True)
    descp = db.Column(db.Text, nullable=False, default="")

    header = db.Column(db.Text, nullable=True)
    footer = db.Column(db.Text, nullable=True)
    theme = db.Column(db.String(40), nullable=False, default="default")
    sidebar = db.Column(db.Text, nullable=True)
    sidebar_ads = db.Column(db.Text, nullable=True)
    category = db.Column(db.String(40), nullable=True, index=True)

    topic_count = db.Column(db.Integer, default=0)
    reply_count = db.Column(db.Integer, default=0)
    parent_node = db.Column(db.Integer, nullable=True)
    avatar_url = db.Column(db.String(100), nullable=True)

    keywords = db.Column(db.Text, default="")
    item_per_page = db.Column(db.Integer, default=50)

    created = db.Column(db.DateTime, nullable=True)  #, default=func.now())
    last_modified = db.Column(
        db.DateTime, nullable=True)  #, onupdate=datetime.datetime.now)

    def __unicode__(self):
        return self.title
Beispiel #3
0
class Message(db.Model):
    __tablename__ = "message"

    query_class = MessageQuery

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), nullable=False)
    content = db.Column(db.String(500), nullable=False)
    sender_id = db.Column(db.Integer, ForeignKey('user.id'))
    receiver_id = db.Column(db.Integer, ForeignKey('user.id'))
    direction = db.Column(db.Integer, default=0)
    reply_id = db.Column(db.Integer, default=0)
    ancestor_id = db.Column(db.Integer, default=0)

    send_tm = db.Column(db.DateTime, nullable=False)
    status = db.Column(db.Integer, default=0)

    sender = relationship("User", primaryjoin="Message.sender_id==User.id")
    receiver = relationship("User", primaryjoin="Message.receiver_id==User.id")
Beispiel #4
0
class UserProfile(db.Model):
    __tablename__ = "userprofile"

    query_class = UserProfileQuery

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, ForeignKey('user.id'))

    role = db.Column(db.Integer, default=0)

    friends = db.Column(db.Integer, default=0)
    followings = db.Column(db.Integer, default=0)
    fans = db.Column(db.Integer, default=0)
    nodes = db.Column(db.Integer, default=0)

    topics = db.Column(db.Integer, default=0)
    replies = db.Column(db.Integer, default=0)

    city = db.Column(db.String(40), nullable=True)
    province = db.Column(db.String(40), nullable=True)
    birthday = db.Column(db.Date, nullable=True)
    blog = db.Column(db.String(100), nullable=True)
    descp = db.Column(db.String(500), nullable=True)
    signature = db.Column(db.String(200), nullable=True)
    workat = db.Column(db.String(200), nullable=True)
    realname = db.Column(db.String(80), nullable=True)
    idcard = db.Column(db.String(32), nullable=True)

    # money
    copper_coins = db.Column(db.BigInteger, default=0)
    gold_coins = db.Column(db.BigInteger, default=0)

    reputation = db.Column(db.Integer, default=100)
    favourate = db.Column(db.Integer, default=0)

    messages = db.Column(db.Integer, default=0)
    unread = db.Column(db.Integer, default=0)

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

    # Required for administrative interface
    def __unicode__(self):
        return "User's %d profile" % self.id
Beispiel #5
0
class Topic(db.Model):
    '''
    status: 0: normal
            1: promotion
            2: close
    '''
    __tablename__ = "topic"

    query_class = TopicQuery

    id = db.Column(db.Integer, primary_key=True)
    section_id = db.Column(db.Integer,
                           ForeignKey('section.id'),
                           nullable=False,
                           index=True)
    section = relationship("Section", backref="topics")
    node_id = db.Column(db.Integer,
                        ForeignKey('node.id'),
                        nullable=False,
                        index=True)
    node = relationship("Node", backref="topics")

    user_id = db.Column(db.Integer,
                        ForeignKey('user.id'),
                        nullable=False,
                        index=True)
    user = relationship("User", backref="topics")

    marks = db.Column(db.Integer, default=0)
    status = db.Column(db.Integer, default=0)

    title = db.Column(db.String(100), nullable=True, index=True)
    content = db.Column(db.Text, nullable=False)
    content_length = db.Column(db.Integer, nullable=True, default=0)
    created = db.Column(db.DateTime, nullable=True)  #, default=func.now())
    last_modified = db.Column(db.DateTime, nullable=True)

    hits = db.Column(db.Integer, default=1)
    reply_count = db.Column(db.Integer, default=0)
    reply_members = db.Column(db.Integer, default=0)
    last_reply_by = db.Column(db.String(100),
                              nullable=False,
                              default="",
                              index=True)
    last_reply_at = db.Column(
        db.DateTime, nullable=True)  #, onupdate=datetime.datetime.now)

    up_count = db.Column(db.Integer, default=0)
    down_count = db.Column(db.Integer, default=0)

    tags = db.Column(db.String(100), nullable=False, index=True)

    impact = db.Column(db.Integer, default=get_current_impact, index=True)
    theme = db.Column(db.String(40), nullable=False, default="default")

    def __unicode__(self):
        '''
        admin need this
        '''
        return self.title

    @property
    def hr_created_tm(self):
        return timesince(self.created)

    @property
    def hr_last_reply(self):
        return timesince(self.last_reply_at)
Beispiel #6
0
class User(UserMixin, db.Model):
    __tablename__ = "user"

    query_class = UserQuery

    id = db.Column(db.Integer, primary_key=True)
    # which is provided by sina weibo, qq weibo, twitter, facebook, etc
    auth_id = db.Column(db.String(32), unique=True, nullable=False)
    username = db.Column(db.String(32), unique=True)
    nickname = db.Column(db.String(32), nullable=True)
    modify_chance = db.Column(db.Integer, default=3)
    email = db.Column(db.String(100), unique=True, nullable=True)
    password = db.Column(db.String(64), nullable=True)
    activation_key = db.Column(db.String(64), nullable=True)
    date_joined = db.Column(db.DateTime, default=datetime.utcnow)
    block = db.Column(db.Boolean, default=False)
    avater = db.Column(db.String(200), nullable=True)
    avater_s = db.Column(db.String(200), nullable=True)
    avater_l = db.Column(db.String(200), nullable=True)
    gender = db.Column(db.String(12), default='', nullable=True)

    vest = db.Column(db.Boolean, default=False)
    vest_accounts = db.Column(db.Integer, default=0)

    profile = relationship("UserProfile", uselist=False, backref="user")

    # Required for administrative interface
    def __unicode__(self):
        return self.username

    def __init__(self, *args, **kwargs):
        super(User, self).__init__(*args, **kwargs)
        self.profile = None

    def is_active(self):
        return self.block == False

    def is_superuser(self):
        return self.id == 1

    @property
    def url(self):
        return url_for("auth.member", username=urllib.quote(self.username))

    @classmethod
    def create_password(cls, raw):
        salt = User.create_token(8)
        hsh = hashlib.sha1(salt + raw +
                           current_app.config["SECRET_KEY"]).hexdigest()
        return "%s$%s" % (salt, hsh)

    @classmethod
    def create_token(cls, length=16):
        chars = ('0123456789'
                 'abcdefghijklmnopqrstuvwxyz'
                 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
        salt = ''.join([choice(chars) for i in range(length)])
        return salt

    def check_password(self, raw):
        if '$' not in self.password:
            return False
        salt, hsh = self.password.split('$')
        verify = hashlib.sha1(salt + raw +
                              current_app.config["SECRET_KEY"]).hexdigest()
        return verify == hsh