diff options
| -rwxr-xr-x | build-concerts.py | 14 | ||||
| -rwxr-xr-x | build-feed.py | 28 | ||||
| -rw-r--r-- | helpers.py | 12 |
3 files changed, 40 insertions, 14 deletions
diff --git a/build-concerts.py b/build-concerts.py index 7b0f75d..d1a7c11 100755 --- a/build-concerts.py +++ b/build-concerts.py @@ -1,13 +1,11 @@ #!/usr/bin/env python3 -from contextlib import contextmanager from datetime import datetime -import locale from pathlib import Path import re from sys import argv -from helpers import guess_language, read_concerts, relative_path +from helpers import guess_language, read_concerts, relative_path, tmplocale # TODO: change some jargon: @@ -65,16 +63,6 @@ THUMBNAIL_TEMPLATE = '''\ ''' -@contextmanager -def tmplocale(lang): - old_lang, encoding = locale.getlocale() - try: - locale.setlocale(locale.LC_TIME, (lang, encoding)) - yield - finally: - locale.setlocale(locale.LC_TIME, (old_lang, encoding)) - - def format_credits(illustration): credits = illustration.source_name diff --git a/build-feed.py b/build-feed.py index 7295563..e2c8244 100755 --- a/build-feed.py +++ b/build-feed.py @@ -4,7 +4,7 @@ from sys import argv from urllib.parse import urljoin from xml.etree.ElementTree import Element, SubElement, indent, tostring -from helpers import guess_language +from helpers import guess_language, read_concerts, tmplocale LOCALIZED_TEXT = { @@ -20,6 +20,15 @@ LOCALIZED_TEXT = { }, } +LOCALIZED_FORMATS = { + 'en': { + 'title': lambda c: f'{c.time.strftime("%B %-d %Y")} in {c.place}', + }, + 'fr': { + 'title': lambda c: f'{c.time.strftime("%-d %B %Y")} à {c.place}', + }, +} + def text_element(tag, text, /, **kwargs): elt = Element(tag, **kwargs) @@ -27,6 +36,20 @@ def text_element(tag, text, /, **kwargs): return elt +def generate_concerts(concerts_src, lang): + formatters = LOCALIZED_FORMATS[lang] + + for c in read_concerts(concerts_src): + item = Element('item') + + with tmplocale(lang): + title = formatters['title'](c) + + item.append(text_element('title', title)) + + yield item + + def main(concerts_src, feed_dst, domain): lang = guess_language(concerts_src) text = LOCALIZED_TEXT[lang] @@ -52,6 +75,9 @@ def main(concerts_src, feed_dst, domain): channel.append(text_element('language', lang)) + items = generate_concerts(concerts_src, lang) + channel.extend(tuple(items)) + indent(rss) with open(feed_dst, 'wb') as feed: @@ -1,5 +1,7 @@ +from contextlib import contextmanager from dataclasses import dataclass from datetime import datetime +import locale from operator import attrgetter from os import path from pathlib import Path @@ -21,6 +23,16 @@ def relative_path(*, to, ref): return path.relpath(to, Path(ref).parent) +@contextmanager +def tmplocale(lang): + old_lang, encoding = locale.getlocale() + try: + locale.setlocale(locale.LC_TIME, (lang, encoding)) + yield + finally: + locale.setlocale(locale.LC_TIME, (old_lang, encoding)) + + _LICENSE_URLS = { 'CC0': 'https://creativecommons.org/publicdomain/zero', 'CC BY': 'https://creativecommons.org/licenses/by', |
