summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKévin Le Gouguec <kevin.legouguec@gmail.com>2022-02-21 21:22:10 +0100
committerKévin Le Gouguec <kevin.legouguec@gmail.com>2022-02-21 21:22:10 +0100
commit0729fb76b52dcdaaf6d9b7f4dd60bc0099f067c3 (patch)
treeb9ca7b00301e3c4698302f67a94789fed78a6b85
parent5876793d01ab2e392e93eec9323dd6a7edb53170 (diff)
downloadquatuorbellefeuille.com-0729fb76b52dcdaaf6d9b7f4dd60bc0099f067c3.tar.xz
[wip] Add CDATA
Doesn't work yet, the tags get escaped. Maybe lxml has a simpler API?
-rwxr-xr-xbuild-concerts.py13
-rwxr-xr-xbuild-feed.py45
-rw-r--r--helpers.py12
3 files changed, 56 insertions, 14 deletions
diff --git a/build-concerts.py b/build-concerts.py
index 0e5a70b..4f55f12 100755
--- a/build-concerts.py
+++ b/build-concerts.py
@@ -6,6 +6,7 @@ import re
from sys import argv
from helpers import (
+ DATE_FORMATTERS,
guess_language,
read_concerts,
relative_path,
@@ -138,18 +139,6 @@ DETAILS_TEMPLATE = '''\
'''
-DATE_FORMATTERS = {
- 'en': {
- 'date': lambda d: d.strftime('%A %B %-d, %Y'),
- 'time': lambda d: d.strftime('%I:%M %P'),
- },
- 'fr': {
- 'date': lambda d: d.strftime('%A %-d %B %Y').capitalize(),
- 'time': lambda d: d.strftime('%Hh%M'),
- },
-}
-
-
def detail_block(tag, classes, content):
opener = f'<{tag} class="{" ".join(classes)}">'
closer = f'</{tag}>'
diff --git a/build-feed.py b/build-feed.py
index d3409f9..a8cb733 100755
--- a/build-feed.py
+++ b/build-feed.py
@@ -4,7 +4,13 @@ from sys import argv
from urllib.parse import urljoin
from xml.etree.ElementTree import Element, SubElement, indent, tostring
-from helpers import guess_language, read_concerts, tmplocale
+from helpers import (
+ DATE_FORMATTERS,
+ guess_language,
+ read_concerts,
+ tmplocale,
+ touchup_plaintext,
+)
LOCALIZED_TEXT = {
@@ -36,6 +42,39 @@ def text_element(tag, text, /, **kwargs):
return elt
+def block(tag, content):
+ return f'<{tag}>{content}</{tag}>'
+
+
+def cdata_concert(concert, lang):
+ formatters = DATE_FORMATTERS[lang]
+
+ blocks = []
+
+ if concert.warning is None:
+ blocks.append(block('p', concert.warning))
+
+ blocks.extend((
+ block('p', formatters['date'](concert.time)),
+ block('p', formatters['time'](concert.time)),
+ block('p', concert.address.replace('\n', '<br>'))
+ ))
+
+ piece_list = '\n'.join(
+ block('li', touchup_plaintext(p)) for p in concert.pieces.splitlines()
+ )
+ blocks.append(block('ol', piece_list))
+
+ blocks.extend(
+ block('p', touchup_plaintext(line))
+ for line in concert.instructions.splitlines()
+ )
+
+ cdata = '\n'.join((blocks))
+
+ return f'<![CDATA[{cdata}]]'
+
+
def generate_concert(concert, concerts_url, lang):
formatters = LOCALIZED_FORMATS[lang]
@@ -48,11 +87,13 @@ def generate_concert(concert, concerts_url, lang):
anchor = f'concert-{concert.time.strftime("%F")}'
item.append(text_element('link', f'{concerts_url}#{anchor}'))
+ cdata = cdata_concert(concert, lang)
+ item.append(text_element('description', cdata))
+
return item
def generate_concerts(concerts_src, concerts_url, lang):
-
for c in read_concerts(concerts_src):
yield generate_concert(c, concerts_url, lang)
diff --git a/helpers.py b/helpers.py
index a746ea2..a6c4de2 100644
--- a/helpers.py
+++ b/helpers.py
@@ -145,3 +145,15 @@ def touchup_plaintext(plaintext):
for regexp, repl in _TOUCHUPS:
text = regexp.sub(repl, text)
return text
+
+
+DATE_FORMATTERS = {
+ 'en': {
+ 'date': lambda d: d.strftime('%A %B %-d, %Y'),
+ 'time': lambda d: d.strftime('%I:%M %P'),
+ },
+ 'fr': {
+ 'date': lambda d: d.strftime('%A %-d %B %Y').capitalize(),
+ 'time': lambda d: d.strftime('%Hh%M'),
+ },
+}