diff options
Diffstat (limited to 'blog/blog/__init__.py')
| -rw-r--r-- | blog/blog/__init__.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/blog/blog/__init__.py b/blog/blog/__init__.py new file mode 100644 index 00000000..81332ddd --- /dev/null +++ b/blog/blog/__init__.py @@ -0,0 +1,54 @@ +import pathlib +import re + +import bicephalus + +import htmlgenerator as h + +from blog import blog_pages, page, html, pretty, gemtext + + +class SimplePage(page.BasePage): + def __init__(self, request, url, title): + super().__init__(request) + self.url = url + self.title = title + + def get_gemini_content(self): + return ( + bicephalus.Status.OK, + "text/gemini", + pathlib.Path(f"static{self.url}index.gmi").read_text(), + ) + + def get_http_content(self): + return ( + bicephalus.Status.OK, + "text/html", + pretty.pretty_html(h.render( + h.HTML( + h.HEAD( + h.TITLE(self.title), + ), + h.BODY(*html.gemini_to_html(gemtext.parse(self.get_gemini_content()[2]))) + ), {})), + ) + + +def handler(request: bicephalus.Request) -> bicephalus.Response: + if request.path == "/": + return blog_pages.Root(request).response() + if re.match(r"/\d{4}/\d{2}/.*/", request.path): + blog_file = pathlib.Path("content") / (request.path[1:-1] + ".gmi") + if blog_file.exists(): + return blog_pages.EntryPage(request, blog_file).response() + if request.path == "/feed/" and request.proto == bicephalus.Proto.HTTP: + return blog_pages.Root(request).feed() + if request.path == "/about/": + return SimplePage(request, request.path, "About Álex Córcoles").response() + if request.path == "/laspelis/": + return SimplePage(request, request.path, "laspelis").response() + if re.match(r"/laspelis/\d+/?", request.path): + return SimplePage(request, request.path.removesuffix("/") + "/", request.path).response() + + return page.NotFound(request).response() |
