summaryrefslogtreecommitdiff
path: root/blog
diff options
context:
space:
mode:
authorDmitry Ilvokhin <d@ilvokhin.com>2023-02-05 13:29:44 +0000
committerDmitry Ilvokhin <d@ilvokhin.com>2023-02-05 13:29:44 +0000
commit4d727570a469f40d124038e4c3f2b05c9185c637 (patch)
treea042e59ad0cf9cf3b1542e7ae87a92a1ebce8b7b /blog
parent0aecd26331741bb149bca9eefedad4a33a3f3ff1 (diff)
downloadblog-4d727570a469f40d124038e4c3f2b05c9185c637.tar.gz
blog-4d727570a469f40d124038e4c3f2b05c9185c637.tar.bz2
blog-4d727570a469f40d124038e4c3f2b05c9185c637.zip
Add type annotation support with mypy
Default target in Makefile check types now.
Diffstat (limited to 'blog')
-rw-r--r--blog/__init__.py0
-rw-r--r--blog/blog.py13
-rw-r--r--blog/feed.py13
-rw-r--r--blog/post.py20
-rw-r--r--blog/render.py6
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"])