summaryrefslogtreecommitdiff
path: root/blog/blog.py
blob: cb6ab1e15c5e57da04f8fde29aa6a1d090d9a817 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#! /usr/bin/env python3
# -*- coding: utf-8 -*

import os
import shutil

from jinja2 import Environment, FileSystemLoader, select_autoescape

from post import Post
from feed import Feed


def recreate_workdir(basedir):
    if os.path.exists(basedir):
        shutil.rmtree(basedir)
    os.makedirs(basedir)


def find_posts(template, basedir):
    posts = []
    for subdir in os.listdir(basedir):
        posts.append(Post(template, os.path.join(basedir, subdir)))
    return posts


def generate_blog(include_drafts=False):
    env = Environment(loader=FileSystemLoader(searchpath="templates"),
                      autoescape=select_autoescape())

    posts = find_posts(env.get_template("post.html"),
                       os.path.join("posts", "public"))

    if include_drafts:
        drafts = find_posts(env.get_template("post.html"),
                            os.path.join("posts", "drafts"))
        posts.extend(drafts)

    workdir = "remote"
    recreate_workdir(workdir)

    for post in posts:
        post.generate(workdir)

    feed = Feed(env.get_template("feed.html"), posts)
    feed.generate(workdir)


def main():
    generate_blog(include_drafts=True)


if __name__ == "__main__":
    main()