diff options
Diffstat (limited to 'blog/atom.py')
-rw-r--r-- | blog/atom.py | 34 |
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) |