示例#1
0
class CommentToMail(db.Model):
    __tablename__ = 'comment_to_mail'
    id = db.Column(db.Integer, primary_key=True)
    comment_id = db.Column(db.Integer, db.ForeignKey('comments.id'))
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)
    is_sent = db.Column(db.Boolean, default=False)
    log = db.Column(db.Text)
    comment = db.relationship('Comment', backref='comment_to_mail')
示例#2
0
class Article(db.Model):
    __tablename__ = 'articles'
    __searchable__ = ['title', 'body']
    __analyzer__ = ChineseAnalyzer()
    id = db.Column(db.Integer, primary_key=True)
    number = db.Column(db.Integer, default=random_number, unique=True)
    title = db.Column(db.String(200), default='')
    body = db.Column(LONGTEXT, default='')
    body_html = db.Column(LONGTEXT)
    body_abstract = db.Column(db.Text)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    author = db.relationship('User', backref='articles')
    repository_id = db.Column(db.String(36))
    status = db.Column(db.String(200), default='')
    version_remark = db.Column(db.TEXT, default='')
    version_timestamp = db.Column(db.DateTime,
                                  index=True,
                                  default=datetime.utcnow)

    @staticmethod
    def query_published():
        return Article.query.filter_by(status='published')

    def to_json(self, level='brief'):
        json = {
            'id': self.id,
            'number': self.number,
            'title': self.title,
            'timestamp':
            self.timestamp.replace(tzinfo=timezone.utc).isoformat(),
            'author': self.author.to_json(level)
        }
        json['plugin'] = Signal.send('to_json', article=self, level=level)
        if level.startswith('admin_'):
            json['repositoryId'] = self.repository_id
            json['status'] = self.status
            json['versionTimestamp'] = self.version_timestamp
            if level == 'admin_brief':
                return json
            json['bodyAbstract'] = self.body_abstract
            if level == 'admin_basic':
                return json
            json['body'] = self.body
            if level == 'admin_full':
                return json
        else:
            if level == 'brief':
                return json
            json['bodyAbstract'] = self.body_abstract
            if level == 'basic':
                return json
            json['body'] = self.body
            json['bodyHtml'] = self.body_html
            if level == 'full':
                return json
示例#3
0
class Message(db.Model):
    __tablename__ = 'comment_to_mail_messages'
    id = db.Column(db.Integer, primary_key=True)
    comment_id = db.Column(db.Integer, db.ForeignKey('comments.id'))
    status = db.Column(db.Text)
    job_id = db.Column(db.String(255))
    message_id = db.Column(db.Text)
    sent_date_time = db.Column(db.DateTime)
    recipient = db.Column(db.Text)
    web_link = db.Column(db.Text)

    comment = db.relationship('Comment', backref='message')
示例#4
0
class Page(db.Model):
    __tablename__ = 'pages'
    id = db.Column(db.Integer, primary_key=True)
    number = db.Column(db.Integer, default=random_number, unique=True)
    title = db.Column(db.String(200), default='')
    _slug = db.Column('slug', db.String(200), default='')
    body = db.Column(db.Text, default='')
    body_html = db.Column(db.Text)
    body_abstract = db.Column(db.Text)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    author = db.relationship(User, backref='pages')
    repository_id = db.Column(db.String(36))
    status = db.Column(db.String(200), default='')
    version_remark = db.Column(db.TEXT, default='')
    version_timestamp = db.Column(db.DateTime,
                                  index=True,
                                  default=datetime.utcnow)

    @hybrid_property
    def slug(self):
        return self._slug

    @slug.setter
    def slug(self, slug):
        self._slug = slugify(slug)

    @staticmethod
    def query_published():
        return Page.query.filter_by(status='published')

    def to_json(self, level='basic'):
        json = {
            'id': self.id,
            'number': self.number,
            'title': self.title,
            'timestamp': self.timestamp,
            'author': self.author.to_json()
        }
        json['plugin'] = Signal.send('to_json', page=self, level=level)
        if level.startswith('admin_'):
            json['repositoryId'] = self.repository_id
            json['status'] = self.status
            json['versionTimestamp'] = self.version_timestamp
            if level == 'admin_brief':
                return json
            json['bodyAbstract'] = self.body_abstract
            if level == 'admin_basic':
                return json
            json['body'] = self.body
            if level == 'admin_full':
                return json
        else:
            if level == 'brief':
                return json
            json['bodyAbstract'] = self.body_abstract
            if level == 'basic':
                return json
            json['body'] = self.body
            json['bodyHtml'] = self.body_html
            if level == 'full':
                return json
        if level == 'basic':
            return json
        json['body'] = self.body
        json['bodyHtml'] = self.body_html
        if level == 'full':
            return json
示例#5
0
class Toc(db.Model):
    __tablename__ = 'toc'
    article_id = db.Column(db.Integer, db.ForeignKey('articles.id'), primary_key=True)
    toc_html = db.Column(db.Text)
    article = db.relationship('Article', backref=db.backref('toc', uselist=False, cascade="all, delete-orphan"))
示例#6
0
class Comment(db.Model):
    __tablename__ = 'comments'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text)
    body_html = db.Column(db.Text)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    ip = db.Column(db.String(64))
    agent = db.Column(db.String(200))
    parent = db.Column(db.Integer)
    author = db.relationship('User', backref='comments')

    article_id = db.Column(db.Integer, db.ForeignKey('articles.id'))
    page_id = db.Column(db.Integer, db.ForeignKey('pages.id'))

    article = db.relationship('Article', backref='comments')
    page = db.relationship('Page', backref='comments')

    @staticmethod
    def create(id=None, body=None, body_html=None, timestamp=None, ip=None, agent=None, parent=None, author=None):
        filter_kwargs = {}
        for param in ['id', 'body', 'body_html', 'timestamp', 'ip', 'agent', 'parent', 'author']:
            if eval(param) is not None:
                filter_kwargs[param] = eval(param)
        return Comment(**filter_kwargs)

    @staticmethod
    def on_changed_body(target, value, oldvalue, initiator):
        class Renderer(mistune.Renderer):
            def __init__(self):
                super().__init__()
                self.toc_count = 0

            def header(self, text, level, raw=None):
                rv = '<h%d id="toc-%d">%s</h%d>\n' % (
                    level, self.toc_count, text, level
                )
                self.toc_count += 1
                return rv

        renderer = Renderer()
        markdown = mistune.Markdown(renderer=renderer)
        target.body_html = markdown(value)

    def to_json(self, level='brief'):
        def get_comment_to(comment):
            if comment.article is not None:
                return comment.article.to_json('admin_brief')
            if comment.page is not None:
                return comment.page.to_json('admin_brief')

        json = {
            'id': self.id
        }
        if level.startswith('admin_'):
            json['body'] = self.body
            json['timestamp'] = self.timestamp
            json['author'] = self.author.to_json('admin_brief')
            json['ip'] = self.ip
            json['to'] = get_comment_to(self)
            if level == 'admin_full':
                return json
        else:
            json['body'] = self.body
            json['timestamp'] = self.timestamp
            json['author'] = self.author.to_json('basic')
            if level == 'basic':
                return json