aboutsummaryrefslogtreecommitdiff
path: root/blog_experiment/blog/blog_pages.py
diff options
context:
space:
mode:
authoralex <alex@pdp7.net>2023-10-13 16:11:25 +0200
committeralex <alex@pdp7.net>2023-10-13 16:11:25 +0200
commit250201b433c0a99f6cabcb2596bfe43f1a5a3968 (patch)
tree8dc5de16ed4315b3ab4fcc001b7dbd74d475c4b3 /blog_experiment/blog/blog_pages.py
parent1a80ac63854ba4ea28f81194ad15314771e979d5 (diff)
Moving to prod!
Diffstat (limited to 'blog_experiment/blog/blog_pages.py')
-rw-r--r--blog_experiment/blog/blog_pages.py139
1 files changed, 0 insertions, 139 deletions
diff --git a/blog_experiment/blog/blog_pages.py b/blog_experiment/blog/blog_pages.py
deleted file mode 100644
index 7802c00b..00000000
--- a/blog_experiment/blog/blog_pages.py
+++ /dev/null
@@ -1,139 +0,0 @@
-import datetime
-import itertools
-import pathlib
-import textwrap
-
-import bicephalus
-
-import htmlgenerator as h
-
-from feedgen import feed
-
-from blog import html, page, gemtext, meta, pretty
-
-
-def gemini_links():
- return "\n".join([f"=> {url} {text}" for text, url in meta.LINKS])
-
-
-class Entry:
- def __init__(self, path: pathlib.Path):
- assert path.is_relative_to(pathlib.Path("content")), f"bad path {path}"
- self.path = path
- self.content = path.read_text()
-
- @property
- def title(self):
- return self.content.splitlines()[0][2:]
-
- @property
- def posted(self):
- return datetime.date.fromisoformat(self.content.splitlines()[1])
-
- @property
- def uri(self):
- return f"/{self.path.parts[1]}/{self.path.parts[2]}/{self.path.stem}/"
-
- @property
- def edit_url(self):
- return f"https://github.com/alexpdp7/gemini_blog/edit/master/content{self.uri[:-1]}.gmi"
-
- def html(self):
- parsed = gemtext.parse(self.content)
-
- assert isinstance(parsed[0], gemtext.Header)
- assert parsed[0].level == 1
- assert isinstance(parsed[1], gemtext.Line)
- assert parsed[2] == gemtext.Line("")
-
- result = html.gemini_to_html(parsed[3:])
- result.append(h.P(h.A("Editar", href=self.edit_url)))
- return result
-
-
-class Root(page.BasePage):
- def entries(self):
- entries = map(Entry, pathlib.Path("content").glob("*/*/*.gmi"))
- return sorted(entries, key=lambda e: e.posted, reverse=True)
-
- def get_gemini_content(self):
- posts = "\n".join([f"=> {e.uri} {e.posted} {e.title}" for e in self.entries()])
- content = (
- textwrap.dedent(
- f"""\
- # {meta.TITLE}
-
- ## {meta.SUBTITLE}
-
- """
- )
- + gemini_links()
- + f"\n{meta.EMAIL_TEXT}\n"
- + "\n"
- + posts
- )
- return bicephalus.Status.OK, "text/gemini", content
-
- def get_http_content(self):
- posts = [
- (h.H3(h.A(f"{e.title} ({e.posted})", href=e.uri))) for e in self.entries()
- ]
- return (
- bicephalus.Status.OK,
- "text/html",
- html.html_template(*itertools.chain(posts)),
- )
-
- def feed(self):
- fg = feed.FeedGenerator()
- fg.title(meta.TITLE)
- fg.subtitle(meta.SUBTITLE)
- fg.link(href=f"{meta.SCHEMA}://{meta.HOST}", rel="self")
-
- for entry in self.entries()[0:10]:
- fe = fg.add_entry()
- url = f"{meta.SCHEMA}://{meta.HOST}/{entry.uri}"
- fe.link(href=url)
- fe.published(datetime.datetime.combine(entry.posted, datetime.datetime.min.time(), tzinfo=datetime.timezone.utc))
- fe.title(entry.title)
- html = h.render(h.BaseElement(*entry.html()), {})
- html = pretty.pretty_html(html)
- fe.content(html, type="html")
-
- return bicephalus.Response(
- status=bicephalus.Status.OK,
- content_type="application/rss+xml",
- content=fg.rss_str(pretty=True),
- )
-
-
-class EntryPage(page.BasePage):
- def __init__(self, request, path):
- super().__init__(request)
- self.path = path
- self.entry = Entry(path)
-
- def get_gemini_content(self):
- content = (
- textwrap.dedent(f"""\
- => gemini://{meta.HOST} alex.corcoles.net
- {meta.EMAIL_TEXT}
-
- """) +
- self.entry.content +
- textwrap.dedent(f"""\
- => {self.entry.edit_url} Editar
- """)
- )
-
- return bicephalus.Status.OK, "text/gemini", content
-
- def get_http_content(self):
- return (
- bicephalus.Status.OK,
- "text/html",
- html.html_template(
- *self.entry.html(),
- page_title=f"{self.entry.title} - {self.entry.posted}",
- ),
- )