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)
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)