Esempio n. 1
0
def init_admin():
    admin.env = Environment(loader=FileSystemLoader('admin/layout/'),
                            trim_blocks=1)
    admin.env.globals.update(
        **{
            'config': config,
            't_config': t_config,
            't_setting': t_setting,
            'data': {
                'posts': posts,
                'pages': pages,
                'tags': tags,
                'categories': categories,
                'index': index,
                'tags_index': tags_index,
                'categories_index': categories_index
            }
        })
    admin.env.filters = env.filters
    admin.env.filters.update(
        toyaml=dyml,
        rejectkey=lambda x, *args: dict(i for i in x.items()
                                        if i[0] not in args))
    admin.tpls = MP(login=admin.env.get_template('login.html'),
                    index=admin.env.get_template('index.html'),
                    editPost=admin.env.get_template('editPost.html'),
                    listPost=admin.env.get_template('listPost.html'))
Esempio n. 2
0
def apiRmPost(data):
    data = MP(data)
    if 'pos' not in data: return {'status': 'failed'}
    rmPost(posts[data.pos])
    mp.pop(posts[data.pos].addr)
    posts.pop(data.pos)
    postsUpd()
    return {'status': 'success'}
Esempio n. 3
0
def apiEditPost(data):
    data = MP(data)
    data.meta = MP(lyml(data.meta))
    if not data.meta.date:
        data.meta.date = datetime.now().replace(microsecond=0)
    elif isinstance(data.meta.date, str):
        data.meta.date = str2date(data.meta.date)
    data.meta.update(title=data.title,
                     top=data.top,
                     tags=data.tags,
                     categories=data.categories)
    file = Path('source/_posts/%s.md' % data.filename)
    file.open('w', encoding='utf-8').write('---\n' + dyml(dict(data.meta)) +
                                           '\n---\n' + data.content)
    x = genitem(file, is_post=1)
    if data.has('pos'):
        post = posts[data.pos]
        if post.filename != data.filename: rmPost(post)
        posts[data.pos] = x
    else:
        posts.append(x)
    postsUpd()
    mp[x.addr] = x
    return {'pos': x.pos, 'status': 'success', 'redirect': data.pos != x.pos}
Esempio n. 4
0
def gen_categories_index(path, cates):
    if cates.sub:
        for cate in cates.sub:
            gen_categories_index(path + cate + '/', cates['sub'][cate])
    if cates.nodes:
        categories_index.extend(
            gen_index(path, cates['nodes'], {
                'layout': 'categories_index',
                'sub': cates.sub
            }))
    elif cates.sub:
        categories_index.append(
            MP(addr=path,
               link=rt + path,
               path=path,
               title=path,
               sub=cates.sub,
               layout='categories_index'))
Esempio n. 5
0
def gen_index(path, a, ext={}):
    num = config.index.per_page
    tot = len(a)
    TOT = math.ceil(tot / num)
    res = []
    for now, i in enumerate(range(0, tot, num), 1):
        nodes = a[i:i + num]
        addr = path if now == 1 else path + 'page/%d/' % now
        res.append(
            MP(id=now,
               addr=addr,
               link=rt + addr,
               path=path,
               title=path,
               nodes=nodes,
               total=tot,
               TOTAL=TOT,
               **ext))
    for id, x in enumerate(res):
        x.pre = res[id - 1]
        x.nxt = res[(id + 1) % TOT]
    return res
Esempio n. 6
0
def generate():
    global posts, pages, tags, categories, index, tags_index, categories_index
    tags, categories = MP(), MP()
    for x in posts + pages:
        for tag in x.tags:
            if tag in tags: tags[tag].append(x)
            else: tags.update({tag: [x]})
        for node in x.categories:
            now = categories
            for categorie in node:
                if not 'sub' in now: now.sub = MP()
                if not categorie in now.sub: now.sub[categorie] = MP()
                now = now.sub[categorie]
            if 'nodes' not in now: now.nodes = [x]
            else: now.nodes.append(x)
    index = gen_index('', posts, {'layout': 'index'})
    tags_index, categories_index = [], []
    for tag in tags:
        tags_index.extend(
            gen_index('tags/%s/' % tag, tags[tag], {
                'tag': tag,
                'layout': 'tags_index'
            }))
    gen_categories_index('categories/', categories)
Esempio n. 7
0
def genitem(file, is_post=0, is_page=0):
    data = rd(file).split('---\n')
    meta = MP(lyml(data[1]))
    if isinstance(meta.date, str): meta.date = str2date(meta.date)
    content = ''.join(data[2:])
    preview = content[0:min(len(content), config.index.preview)]
    if '<!-- more -->' in content:
        preview = content.split('<!-- more -->', 1)[0]
    name = file.stem
    x = MP(filename=name,
           assets=file.parent / file.stem,
           addr=name + '/',
           link=rt + name + '/',
           title=name,
           date=datetime.fromtimestamp(int(os.stat(file).st_mtime)),
           author=config.author,
           tags=[],
           categories=[],
           top=0,
           content=content,
           preview=preview,
           meta=meta)
    x.update(t_setting.defaut_front)
    x.update(meta)
    if is_post:
        if config.post_addr == 'pinyin': x.addr = 'posts/%s/' % toPinyin(name)
        elif config.post_addr == 'origin': x.addr = 'posts/%s/' % name

        if x.permalink: x.addr = 'posts/%s/' % x.permalink
        x.link = rt + x.addr

        if not x.layout: x.layout = 'post'
    if is_page and not x.layout: x.layout = 'page'
    return x
Esempio n. 8
0
chkDependences()

from jinja2 import Environment, FileSystemLoader, Template
from funcs import lyml, dyml, cp, del_none, str2date, rd, toPinyin, MP
from encrypt import encrypt


def op(path, data):
    if DEBUG: print(path)
    path = Dest / path
    if not path.suffix == '.html': path = path / 'index.html'
    path.parent.mkdir(parents=1, exist_ok=1)
    path.open('w', encoding='utf-8').write(data)


config = MP(lyml(rd('config.yml')))
tSrc = Path('theme/%s/' % config.theme)
dest = config.dest
Dest = Path(dest)
DEBUG = config.debug
rt = config.site.rt = urlparse(config.site.url).path
t_config = MP(lyml(rd(tSrc / 'config.yml')))
t_setting = MP(lyml(rd(tSrc / 'setting.yml')))

posts, pages = [], []
tags, categories = MP(), MP()
index, tags_index, categories_index = [], [], [],
urls = []
env, tpls = False, MP()
last_build_time = datetime.now().replace(microsecond=0)
Esempio n. 9
0
chkDependences()

from jinja2 import Environment, FileSystemLoader, Template
from funcs import lyml, dyml, cp, del_none, str2date, rd, toPinyin, MP
from encrypt import encrypt


def op(path, data):
    if DEBUG: print(path)
    path = Dest / path
    if not path.suffix == '.html': path = path / 'index.html'
    path.parent.mkdir(parents=1, exist_ok=1)
    path.open('w', encoding='utf-8').write(data)


config = MP(lyml(rd('config.yml')))
dest = config.dest
Dest = Path(dest)
DEBUG = config.debug
rt = config.site.rt = urlparse(config.site.url).path
t_config = MP(lyml(rd('theme/%s/config.yml' % config.theme)))
t_setting = MP(lyml(rd('theme/%s/setting.yml' % config.theme)))

posts, pages = [], []
tags, categories = MP(), MP()
index, tags_index, categories_index = [], [], [],
urls = []
env, tpls = False, MP()
last_build_time = datetime.now().replace(microsecond=0)