From 96d437baab4a622eb540719feb90ea810fb01756 Mon Sep 17 00:00:00 2001 From: Dmitry Ilvokhin Date: Sat, 19 Apr 2025 21:43:53 +0100 Subject: Add support for atom / rss feed 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. --- blog/atom.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 blog/atom.py (limited to 'blog/atom.py') 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) -- cgit v1.2.3-70-g09d2