summaryrefslogtreecommitdiff
path: root/blog/blog.py
blob: 4b9a3459987662852a64a496381646fb92c9fb74 (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
54
55
56
57
58
59
60
61
62
63
64
#! /usr/bin/env python3
# -*- coding: utf-8 -*

import os
import shutil
import argparse
from typing import List

from jinja2 import Template, Environment, FileSystemLoader, select_autoescape

from post import Post
from feed import Feed
from atom import Atom


def recreate_workdir(basedir: str) -> None:
    if os.path.exists(basedir):
        shutil.rmtree(basedir)
    os.makedirs(basedir)


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


def copy_share(workdir: str) -> None:
    for filename in os.listdir("share"):
        source = os.path.join("share", filename)
        destination = os.path.join(workdir, filename)

        shutil.copy(source, destination)


def generate_blog() -> None:
    env = Environment(loader=FileSystemLoader(searchpath="templates"),
                      autoescape=select_autoescape())

    posts = find_posts(env.get_template("post.html"), "posts")
    posts = sorted(posts, key=lambda x: x.metadata.date, reverse=True)

    workdir = "remote"
    recreate_workdir(workdir)

    for post in posts:
        post.generate(workdir)

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

    atom = Atom(env.get_template("atom.xml"), posts)
    atom.generate(workdir)

    copy_share(workdir)


def main() -> None:
    generate_blog()


if __name__ == "__main__":
    main()