diff options
| author | cashmere <cashmere@autistici.org> | 2026-06-20 00:02:33 +0200 |
|---|---|---|
| committer | cashmere <cashmere@autistici.org> | 2026-06-20 00:02:33 +0200 |
| commit | 92b87e4bc2261d1533b6443d1ec72b7589df2dd3 (patch) | |
| tree | 293cf57e1ef3f582436b7109cfbc1409c8f71657 /src | |
| parent | 48b901c816f45c6451e922bb4d6fad53c40f99e0 (diff) | |
| download | technical-renaissance-92b87e4bc2261d1533b6443d1ec72b7589df2dd3.tar.gz | |
app.py: build_opml
Diffstat (limited to 'src')
| -rw-r--r-- | src/technical_renaissance/app.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/technical_renaissance/app.py b/src/technical_renaissance/app.py index 6d63180..5519027 100644 --- a/src/technical_renaissance/app.py +++ b/src/technical_renaissance/app.py @@ -4,6 +4,7 @@ import random import tomllib from pathlib import Path from typing import TypedDict +from xml.etree import ElementTree from robyn import Request, Response, Robyn from robyn.templating import JinjaTemplate @@ -65,4 +66,21 @@ async def random_user(_request: Request): return redirect(random.choice(users)["url"]) +def build_opml() -> str: + opml = ElementTree.Element("opml", version="2.0") + head = ElementTree.SubElement(opml, "head") + ElementTree.SubElement(head, "title").text = "Technical Renaissance Webring" + body = ElementTree.SubElement(opml, "body") + for user in users: + if user["feed"]: + ElementTree.SubElement( + body, + "outline", + text=user["name"], + type="rss", + xmlUrl=user["feed"], + htmlUrl=user["url"], + ) + return ElementTree.tostring(opml, encoding="unicode", xml_declaration=True) + app.start(host="127.0.0.1", port=8080) |
