diff options
| author | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2022-02-21 21:22:10 +0100 |
|---|---|---|
| committer | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2022-02-21 21:22:10 +0100 |
| commit | 0729fb76b52dcdaaf6d9b7f4dd60bc0099f067c3 (patch) | |
| tree | b9ca7b00301e3c4698302f67a94789fed78a6b85 | |
| parent | 5876793d01ab2e392e93eec9323dd6a7edb53170 (diff) | |
| download | quatuorbellefeuille.com-0729fb76b52dcdaaf6d9b7f4dd60bc0099f067c3.tar.xz | |
[wip] Add CDATA
Doesn't work yet, the tags get escaped. Maybe lxml has a simpler API?
| -rwxr-xr-x | build-concerts.py | 13 | ||||
| -rwxr-xr-x | build-feed.py | 45 | ||||
| -rw-r--r-- | helpers.py | 12 |
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) @@ -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'), + }, +} |
