summaryrefslogtreecommitdiff
path: root/blog/blog/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'blog/blog/__init__.py')
-rw-r--r--blog/blog/__init__.py54
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()