diff options
Diffstat (limited to 'blog')
-rw-r--r-- | blog/__init__.py | 0 | ||||
-rw-r--r-- | blog/blog.py | 13 | ||||
-rw-r--r-- | blog/feed.py | 13 | ||||
-rw-r--r-- | blog/post.py | 20 | ||||
-rw-r--r-- | blog/render.py | 6 |
5 files changed, 35 insertions, 17 deletions
diff --git a/blog/__init__.py b/blog/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/blog/__init__.py +++ /dev/null diff --git a/blog/blog.py b/blog/blog.py index b88288d..27845bc 100644 --- a/blog/blog.py +++ b/blog/blog.py @@ -4,27 +4,28 @@ import os import shutil import argparse +from typing import List -from jinja2 import Environment, FileSystemLoader, select_autoescape +from jinja2 import Template, Environment, FileSystemLoader, select_autoescape from post import Post from feed import Feed -def recreate_workdir(basedir): +def recreate_workdir(basedir: str) -> None: if os.path.exists(basedir): shutil.rmtree(basedir) os.makedirs(basedir) -def find_posts(template, 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): +def copy_share(workdir: str) -> None: for filename in os.listdir("share"): source = os.path.join("share", filename) destination = os.path.join(workdir, filename) @@ -32,7 +33,7 @@ def copy_share(workdir): shutil.copy(source, destination) -def generate_blog(): +def generate_blog() -> None: env = Environment(loader=FileSystemLoader(searchpath="templates"), autoescape=select_autoescape()) @@ -51,7 +52,7 @@ def generate_blog(): copy_share(workdir) -def main(): +def main() -> None: generate_blog() diff --git a/blog/feed.py b/blog/feed.py index a63ee77..3e5b2e0 100644 --- a/blog/feed.py +++ b/blog/feed.py @@ -1,18 +1,25 @@ import os +from typing import List + +from jinja2 import Template import render +from post import Post class Feed(object): - def __init__(self, template, posts): + template: Template + posts: List[Post] + + def __init__(self, template: Template, posts: List[Post]) -> None: self.template = template self.posts = Feed._remove_drafts(posts) @staticmethod - def _remove_drafts(posts): + def _remove_drafts(posts: List[Post]) -> List[Post]: return list(filter(lambda x: x.metadata.status != "draft", posts)) - def generate(self, basedir): + def generate(self, basedir: str) -> None: index = os.path.join(basedir, "index.html") rendered = self.template.render(posts=self.posts) render.write_file_content(index, rendered) diff --git a/blog/post.py b/blog/post.py index 54440ff..1ac8dfa 100644 --- a/blog/post.py +++ b/blog/post.py @@ -2,27 +2,37 @@ import os import shutil import datetime import functools +from typing import Dict + +from jinja2 import Template import render class Metadata(object): __slots__ = ("title", "date", "status") + title: str + date: str + status: str - def __init__(self, title, date, status): + def __init__(self, title: str, date: str, status: str) -> None: self.title = title self.date = date self.status = status class Post(object): - def __init__(self, template, directory): + template: Template + directory: str + name: str + + def __init__(self, template: Template, directory: str) -> None: self.template = template self.directory = directory self.name = os.path.basename(directory) @staticmethod - def _load_raw_metadata(filename): + def _load_raw_metadata(filename: str) -> Dict[str, str]: data = {} with open(filename) as f: @@ -33,7 +43,7 @@ class Post(object): return data @functools.cached_property - def metadata(self): + def metadata(self) -> Metadata: raw = Post._load_raw_metadata(os.path.join(self.directory, "metadata.txt")) @@ -43,7 +53,7 @@ class Post(object): return Metadata(title, date, status) - def generate(self, basedir): + def generate(self, basedir: str) -> None: postdir = os.path.basename(self.directory) workdir = os.path.join(basedir, postdir) os.makedirs(workdir) diff --git a/blog/render.py b/blog/render.py index 4e26318..cdd018f 100644 --- a/blog/render.py +++ b/blog/render.py @@ -1,16 +1,16 @@ import markdown -def read_file_content(filename): +def read_file_content(filename: str) -> str: with open(filename) as f: return f.read() -def write_file_content(filename, data): +def write_file_content(filename: str, data: str) -> None: with open(filename, mode='w') as f: f.write(data) -def to_html(filename): +def to_html(filename: str) -> str: text = read_file_content(filename) return markdown.markdown(text, extensions=["fenced_code", "footnotes"]) |