quatuorbellefeuille.com

Content, build scripts and admin scripts for the Bellefeuille Quartet website.
git clone https://git.kevinlegouguec.net/quatuorbellefeuille.com
Log | Files | Refs

commit 0729fb76b52dcdaaf6d9b7f4dd60bc0099f067c3
parent 5876793d01ab2e392e93eec9323dd6a7edb53170
Author: Kévin Le Gouguec <kevin.legouguec@gmail.com>
Date:   Mon, 21 Feb 2022 21:22:10 +0100

[wip] Add CDATA

Doesn't work yet, the tags get escaped.  Maybe lxml has a simpler API?

Diffstat:
Mbuild-concerts.py | 13+------------
Mbuild-feed.py | 45+++++++++++++++++++++++++++++++++++++++++++--
Mhelpers.py | 12++++++++++++
3 files changed, 56 insertions(+), 14 deletions(-)

diff --git 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 @@ -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 @@ -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'), + }, +}