diff --git a/resspublica/main.py b/resspublica/main.py index 052b2f7..a92a219 100644 --- a/resspublica/main.py +++ b/resspublica/main.py @@ -5,8 +5,41 @@ from datetime import datetime from datetime import datetime from zoneinfo import ZoneInfo +def getSignatureInfo(start_date_str, lang="fr"): + MONTHS = { + "fr": ["janvier","février","mars","avril","mai","juin", + "juillet","août","septembre","octobre","novembre","décembre"], + "de": ["Januar","Februar","März","April","Mai","Juni", + "Juli","August","September","Oktober","November","Dezember"], + "it": ["gennaio","febbraio","marzo","aprile","maggio","giugno", + "luglio","agosto","settembre","ottobre","novembre","dicembre"] + } + texts = { + "fr": ("La collecte des signatures a commencé le", "et se terminera vers"), + "de": ("Die Unterschriftensammlung begann am", "und endet ungefähr im"), + "it": ("La raccolta delle firme è iniziata il", "e terminerà circa nel"), + } + start_date = datetime.strptime(start_date_str, "%Y-%m-%d") + end_date = start_date + relativedelta(months=18) + + def format_full(d): + if lang == "de": + return f"{d.day}. {MONTHS[lang][d.month - 1]} {d.year}" + return f"{d.day} {MONTHS[lang][d.month - 1]} {d.year}" + + def format_month_year(d): + return f"{MONTHS[lang][d.month - 1]} {d.year}" + + start = format_full(start_date) + end = format_month_year(end_date) + + return f""" +

+ {texts[lang][0]} {start} {texts[lang][1]} {end}. +

+ """.strip() def getValue(row, key): return row.get(key, {}).get("value") or None def generateFeed(title, description, fileName, language, standards, entries): @@ -30,7 +63,7 @@ def generateFeed(title, description, fileName, language, standards, entries): fe.guid(f"initiative-{item['id']}", permalink=False) fe.updated(time) fe.source({'url': item["url"], 'title': item["source"]}) - fe.content(f'

Official page

{item["text"]}', type="html") + fe.content(item["text"], type="html") if "rss" in standards: fg.rss_file("./feed/rss/" + language + "/" + fileName + ".xml", pretty=True) if "atom" in standards: @@ -70,11 +103,11 @@ def generateFederalFeed(): "id": getValue(entry, "id"), "date": getValue(entry, "date"), "title": getValue(entry, "title_" + lang), - "article": getValue(entry, "artikel_" + lang), "text": getValue(entry, "text_" + lang), "url": BASE_URLS.get(lang, BASE_URLS["de"]) + str(getValue(entry, "id")), "source": BASE_SOURCE[lang] } + item["text"] = "

Official page

" + getSignatureInfo(item["date"], lang) + item["text"] feeds[lang].append(item) generateFeed( "Initiatives populaires fédérales", diff --git a/resspublica/queries/federalPopularInitiatives.sparql b/resspublica/queries/federalPopularInitiatives.sparql index 58fa48e..40a8ab2 100644 --- a/resspublica/queries/federalPopularInitiatives.sparql +++ b/resspublica/queries/federalPopularInitiatives.sparql @@ -4,21 +4,13 @@ SELECT ?id ?date - (GROUP_CONCAT(DISTINCT IF(LANG(?title)="fr", STR(?title), ""); separator=" || ") AS ?title_fr) - (GROUP_CONCAT(DISTINCT IF(LANG(?title)="de", STR(?title), ""); separator=" || ") AS ?title_de) - (GROUP_CONCAT(DISTINCT IF(LANG(?title)="it", STR(?title), ""); separator=" || ") AS ?title_it) + (GROUP_CONCAT(DISTINCT IF(LANG(?title)="fr", STR(?title), ""); separator=" ") AS ?title_fr) + (GROUP_CONCAT(DISTINCT IF(LANG(?title)="de", STR(?title), ""); separator=" ") AS ?title_de) + (GROUP_CONCAT(DISTINCT IF(LANG(?title)="it", STR(?title), ""); separator=" ") AS ?title_it) - (GROUP_CONCAT(DISTINCT IF(LANG(?status)="fr", STR(?status), ""); separator=" || ") AS ?status_fr) - (GROUP_CONCAT(DISTINCT IF(LANG(?status)="de", STR(?status), ""); separator=" || ") AS ?status_de) - (GROUP_CONCAT(DISTINCT IF(LANG(?status)="it", STR(?status), ""); separator=" || ") AS ?status_it) - - (GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="fr", STR(?initiativtext), ""); separator=" || ") AS ?text_fr) - (GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="de", STR(?initiativtext), ""); separator=" || ") AS ?text_de) - (GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="it", STR(?initiativtext), ""); separator=" || ") AS ?text_it) - - (GROUP_CONCAT(DISTINCT IF(LANG(?artikel)="fr", STR(?artikel), ""); separator=" || ") AS ?artikel_fr) - (GROUP_CONCAT(DISTINCT IF(LANG(?artikel)="de", STR(?artikel), ""); separator=" || ") AS ?artikel_de) - (GROUP_CONCAT(DISTINCT IF(LANG(?artikel)="it", STR(?artikel), ""); separator=" || ") AS ?artikel_it) + (GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="fr", STR(?initiativtext), ""); separator=" ") AS ?text_fr) + (GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="de", STR(?initiativtext), ""); separator=" ") AS ?text_de) + (GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="it", STR(?initiativtext), ""); separator=" ") AS ?text_it) WHERE { @@ -30,15 +22,11 @@ WHERE { ?id ; ?date ; ?titleUri ; - ?statusUri ; - ?textUri ; - ?articleUri . + ?textUri . ?titleUri schema:name ?title . - ?statusUri schema:name ?status . OPTIONAL { ?textUri schema:name ?initiativtext . } - OPTIONAL { ?articleUri schema:name ?artikel . } } GROUP BY ?id ?date ORDER BY DESC(?date)