summaryrefslogtreecommitdiff
path: root/blog/blog.py
diff options
context:
space:
mode:
Diffstat (limited to 'blog/blog.py')
-rw-r--r--blog/blog.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/blog/blog.py b/blog/blog.py
new file mode 100644
index 0000000..cb6ab1e
--- /dev/null
+++ b/blog/blog.py
@@ -0,0 +1,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()