summaryrefslogtreecommitdiff
path: root/blog/atom.py
diff options
context:
space:
mode:
Diffstat (limited to 'blog/atom.py')
-rw-r--r--blog/atom.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/blog/atom.py b/blog/atom.py
new file mode 100644
index 0000000..e6d836c
--- /dev/null
+++ b/blog/atom.py
@@ -0,0 +1,34 @@
+import os
+import datetime
+import functools
+from typing import List
+
+from jinja2 import Template
+
+import render
+from post import Post, remove_drafts
+
+
+class Atom(object):
+ template: Template
+ posts: List[Post]
+
+ def __init__(self, template: Template, posts: List[Post]) -> None:
+ self.template = template
+ self.posts = remove_drafts(posts)
+
+ @staticmethod
+ def _now() -> datetime.datetime:
+ now = datetime.datetime.now(datetime.timezone.utc)
+ return now.replace(microsecond=0)
+
+ @functools.cached_property
+ def updated(self) -> datetime.datetime:
+ if not self.posts:
+ return self._now()
+ return self.posts[0].metadata.updated
+
+ def generate(self, basedir: str) -> None:
+ atom = os.path.join(basedir, "atom.xml")
+ rendered = self.template.render(updated=self.updated, posts=self.posts)
+ render.write_file_content(atom, rendered)