Example #1
0
def update_db(mddir, user_id, old_commit=None):

    # old_commit='' or None, initdb
    if not old_commit:
        _init_db(mddir, user_id)
        return
    diff = gitutil.modified_files(mddir, old_commit)

    def parse_path(path):
        fdir, fname = os.path.split(path)
        subdir = os.path.basename(fdir)
        return subdir, fname
    # delete files
    deleted_files = [parse_path(path) for status, path in diff
                     if status == "D"]
    for subdir, filename in deleted_files:
        with db_session:
            meta = model.ArticleMeta.get(subdir=subdir, filename=filename)
            if meta:
                meta.article.delete()

    # update files
    with db_session:
        u = model.BlogUser.get(user_id=user_id)
        if not u:
            abort(404)
        for content, toc, meta in read_modified_articles(mddir, diff):
            m_tags = _get_mtags(meta)
            m_meta = model.ArticleMeta.get(subdir=subdir, filename=filename)
            if m_meta:
                m_meta.set(**dict(meta, tags=m_tags))
                m_meta.article.set(content=content, toc=toc)
            else:
                m_meta = model.ArticleMeta(**dict(meta, tags=m_tags, bloguser=u))
                m_article = model.Article(
                    content=content, toc=toc, meta=m_meta)
Example #2
0
def update_db(mddir, gitname, old_commit=None):

    # old_commit='' or None, initdb
    if not old_commit:
        _init_db(mddir, gitname)
        return
    diff = gitutil.modified_files(mddir, old_commit)

    def parse_path(path):
        fdir, fname = os.path.split(path)
        subdir = os.path.basename(fdir)
        return subdir, fname

    deleted_files = [parse_path(path) for status, path in diff if status == "D"]
    with db_session:
        u = model.BlogUser.get(gitname=gitname)
        if not u:
            abort(404, "bloguser gitname=%s not exists" % gitname)
        # delete files
        for subdir, fname in deleted_files:
            art = model.Article.get(gitname=gitname, subdir=subdir, filename=fname)
            if art is not None:
                art.delete()

        # update files
        for html, toc, meta in read_modified_articles(mddir, diff):
            m_tags = _get_mtags(meta)
            art = model.Article.get(gitname=gitname, subdir=meta["subdir"], filename=meta["filename"])
            if art is not None:
                # modified
                art.set(**dict(meta, tags=m_tags, bloguser=u))
                art.content.set(html=html, toc=toc)
            else:
                # add new
                art = model.Article(**dict(meta, tags=m_tags, gitname=gitname, bloguser=u))
                cont = model.ArticleContent(article=art, html=html, toc=toc)