From 1bf87aaa088d975e6272f3e1a9722bf722b910e5 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Wed, 2 Aug 2023 22:30:45 +0100 Subject: Tool to generate a releases atom file --- tools/atom.py | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100755 tools/atom.py (limited to 'tools') diff --git a/tools/atom.py b/tools/atom.py new file mode 100755 index 0000000..c3b3da4 --- /dev/null +++ b/tools/atom.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 + +import re +from datetime import datetime, timezone, date + +release = re.compile("^## Release ([0-9]+\\.[0-9]+\\.[0-9]+) - ([0-9]+-[0-9]+-[0-9]+)$") + +title = "SpaceBeans releases" +base_url = "https://www.usebox.net/jjm/spacebeans/" +feed_file = "releases.xml" +author = "jjm" +tz = timezone.utc + + +def get_entries(changes): + entries = [] + + with open(changes, "rt") as fd: + lines = fd.readlines() + + i = 0 + while i < len(lines): + line = lines[i] + m = release.match(line) + if m: + version = m.group(1) + updated_on = datetime.fromisoformat(m.group(2)).astimezone(tz) + body = "" + i += 1 + while i < len(lines) and (lines[i] == "" or lines[i][0] != "#"): + body += lines[i] + i += 1 + + entries.append(dict(version=version, updated_on=updated_on, body=body)) + else: + i += 1 + + entries.sort(key=lambda o: o["updated_on"], reverse=True) + return entries + + +def to_atom(post): + return """\ + + {title} + + {url} + {updated_on} + +
+
{body}
+
+
+
\n""".format( + title="Released SpaceBeans " + post["version"], + url=base_url + "#" + post["version"], + updated_on=datetime.combine( + post["updated_on"], datetime.min.time() + ).isoformat(), + body=post["body"].rstrip() + "\n", + ) + + +def gen_atom(entries): + + updated_on = datetime(1900, 1, 1, tzinfo=tz) + posts_atom = [] + for post in entries: + if post["updated_on"] > updated_on: + updated_on = post["updated_on"] + + posts_atom.append(to_atom(post)) + + return "\n".join( + [ + """""", + """""", + """%s""" % title, + """""" % base_url, + """""" % (base_url + feed_file), + """%s""" % updated_on.isoformat(), + """%s""" % base_url, + """""", + """ %s""" % author, + """""", + ] + + posts_atom + + [""] + ) + + +def main(): + entries = get_entries("../CHANGES.md") + with open(feed_file, "wt") as fd: + fd.write(gen_atom(entries)) + + +if __name__ == "__main__": + main() -- cgit v1.2.3