From cd9e5d7c5c59fb601413a4167f3f97376359156e Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 8 Oct 2023 20:48:47 +0200 Subject: [PATCH] Add links * Prettify using lxml instead of bs4, because bs4 changes whitespace :( --- blog_experiment/blog/blog_pages.py | 6 ++---- blog_experiment/blog/html.py | 22 ++++++++++++++++------ blog_experiment/blog/meta.py | 9 +++++++++ blog_experiment/blog/pretty.py | 5 +++++ blog_experiment/poetry.lock | 2 +- blog_experiment/pyproject.toml | 1 + 6 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 blog_experiment/blog/pretty.py diff --git a/blog_experiment/blog/blog_pages.py b/blog_experiment/blog/blog_pages.py index b6f2208..065e488 100644 --- a/blog_experiment/blog/blog_pages.py +++ b/blog_experiment/blog/blog_pages.py @@ -3,15 +3,13 @@ import itertools import pathlib import textwrap -import bs4 - import bicephalus import htmlgenerator as h from feedgen import feed -from blog import html, page, gemtext, meta +from blog import html, page, gemtext, meta, pretty class Entry: @@ -152,7 +150,7 @@ class Root(page.BasePage): 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 = bs4.BeautifulSoup(html, features="html.parser").prettify() + html = pretty.pretty_html(html) fe.content(html, type="html") return bicephalus.Response( diff --git a/blog_experiment/blog/html.py b/blog_experiment/blog/html.py index 25a2e82..c7112ea 100644 --- a/blog_experiment/blog/html.py +++ b/blog_experiment/blog/html.py @@ -1,25 +1,35 @@ -import bs4 +import itertools + import htmlgenerator as h -from blog import meta +from blog import meta, pretty def html_template(*content, page_title=None): - title = meta.TITLE + title = [h.A(meta.TITLE, href=meta.BASE_URL)] if page_title: title += f" - {page_title}" - return bs4.BeautifulSoup(h.render( + + title = h.BaseElement(*title) + + links = list(itertools.chain(*[(h.A(text, href=href), ", ") for text, href in meta.LINKS])) + + links += h.BaseElement(f" {meta.EMAIL_TEXT}") + + return pretty.pretty_html(h.render( h.HTML( h.HEAD( - h.TITLE(title), + h.TITLE(meta.TITLE + (f" - {page_title}" if page_title else "")), h.LINK(rel="alternate", type="application/rss+xml", title=meta.TITLE, href=f"{meta.BASE_URL}/feed/"), ), h.BODY( h.H1(title), h.H2(meta.SUBTITLE), + h.P(*links), *content, ), doctype="html", ), {}, - ), features="html.parser").prettify() + )) + diff --git a/blog_experiment/blog/meta.py b/blog_experiment/blog/meta.py index 81c74a9..8ab0884 100644 --- a/blog_experiment/blog/meta.py +++ b/blog_experiment/blog/meta.py @@ -1,3 +1,12 @@ TITLE = "El blog es mío" SUBTITLE = "Hay otros como él, pero este es el mío" BASE_URL = "https://blog.pdp7.net" + +LINKS = ( + ("GitHub", "https://github.com/alexpdp7/"), + ("LinkedIn", "https://es.linkedin.com/in/alexcorcoles"), + ("Project Euler", "https://projecteuler.net/profile/koalillo.png"), + ("Stack Exchange", "https://stackexchange.com/users/13361/alex"), +) + +EMAIL_TEXT = "escríbeme cogiendo el dominio de esta web y cambiando el primer punto por una arroba" diff --git a/blog_experiment/blog/pretty.py b/blog_experiment/blog/pretty.py new file mode 100644 index 0000000..2ae916a --- /dev/null +++ b/blog_experiment/blog/pretty.py @@ -0,0 +1,5 @@ +from lxml import etree, html + + +def pretty_html(s): + return etree.tostring(html.fromstring(s), pretty_print=True).decode("utf8") diff --git a/blog_experiment/poetry.lock b/blog_experiment/poetry.lock index 508ed16..57ce657 100644 --- a/blog_experiment/poetry.lock +++ b/blog_experiment/poetry.lock @@ -1321,4 +1321,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "d84139eb7e19e366ef33bb9e36f3c74ca432b9c5931d9f19d6fb1b8693400654" +content-hash = "97fc5ab9e66a2dd243b910c6408cbf77194f61b070c35ef9d2aca9ea1c329c56" diff --git a/blog_experiment/pyproject.toml b/blog_experiment/pyproject.toml index 61878a9..b236e8e 100644 --- a/blog_experiment/pyproject.toml +++ b/blog_experiment/pyproject.toml @@ -12,6 +12,7 @@ bicephalus = { git = "https://github.com/alexpdp7/bicephalus.git" } htmlgenerator = "^1.2.28" beautifulsoup4 = "^4.12.2" feedgen = "^0.9.0" +lxml = "^4.9.3" [tool.poetry.group.dev.dependencies] pytest = "^7.4.2" -- 2.47.3