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 /build-feed.py | |
| 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?
Diffstat (limited to 'build-feed.py')
| -rwxr-xr-x | build-feed.py | 45 |
1 files changed, 43 insertions, 2 deletions
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) |
