diff options
author | Dmitry Ilvokhin <d@ilvokhin.com> | 2025-04-19 21:43:53 +0100 |
---|---|---|
committer | Dmitry Ilvokhin <d@ilvokhin.com> | 2025-04-19 21:43:53 +0100 |
commit | 96d437baab4a622eb540719feb90ea810fb01756 (patch) | |
tree | 8757d41e9e2c673965483b2466ae306c9a7b8368 /blog/atom.py | |
parent | ea523d411689338876abd7b87d85164009e7ec73 (diff) | |
download | blog-96d437baab4a622eb540719feb90ea810fb01756.tar.gz blog-96d437baab4a622eb540719feb90ea810fb01756.tar.bz2 blog-96d437baab4a622eb540719feb90ea810fb01756.zip |
Date format was changed to support `updated` in ISO format. Now every
post will require date and time, which might be a usability regression,
but we'll see. Also, `updated` field was introduced in metadata. If
there is no such field, them date field will be used instead.
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) |