Compare commits

..

1 commit

Author SHA1 Message Date
a84e1e2153 Behebe Layoutauswahl unter aktuellem Hugo.
Die layouts/_default/*.calendar.html-Vorlagen werden in Hugo
≥0.158 fälschlich für die HTML-Ausgabe ausgewählt, sodass alle
Sektions- und Einzelseiten VCALENDAR- statt HTML-Inhalt
enthielten. Die Vorlagen waren ohnehin nie funktionsfähig
(Warnung „found no layout file for calendar"); die ICS-Feeds
liefern die abschnittsspezifischen Vorlagen unter
layouts/{veranstaltungen,datengarten,page}/.

list.xml.html bekommt aus demselben Grund die korrekte Endung
.xml.

tools/gen_upcoming.py vergleicht Datumsangaben jetzt
zeitzonenneutral, damit Events mit Z-Suffix keinen TypeError
auslösen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-03 16:52:59 +02:00
5 changed files with 11 additions and 44 deletions

View file

@ -1 +0,0 @@
{{ block "main" . }}{{ .Content }}{{ end }}

View file

@ -1,21 +0,0 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CCCB//Calendar//DE
{{ with .Title }}
X-WR-CALNAME:{{ . }}
{{ end }}
CALSCALE:GREGORIAN
METHOD:PUBLISH
{{ range .Pages }}
{{ if .Date }}
BEGIN:VEVENT
UID:{{ .File.UniqueID }}@berlin.ccc.de
DTSTAMP:{{ .Date.Format "20060102T150405Z" }}
DTSTART:{{ .Date.Format "20060102T150405Z" }}
SUMMARY:{{ .Title }}
DESCRIPTION:{{ .Summary | plainify }}
URL:{{ .Permalink }}
END:VEVENT
{{ end }}
{{ end }}
END:VCALENDAR

View file

@ -1,21 +0,0 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CCCB//Calendar//DE
{{ with .Title }}
X-WR-CALNAME:{{ . }}
{{ end }}
CALSCALE:GREGORIAN
METHOD:PUBLISH
{{ if .Date }}
BEGIN:VEVENT
UID:{{ .File.UniqueID }}@berlin.ccc.de
DTSTAMP:{{ .Date.Format "20060102T150405Z" }}
DTSTART:{{ .Date.Format "20060102T150405Z" }}
{{ with .Params.event.end }}DTEND:{{ dateFormat "20060102T150405Z" . }}{{ end }}
SUMMARY:{{ .Title }}
DESCRIPTION:{{ .Summary | plainify }}
URL:{{ .Permalink }}
{{ with .Params.location }}LOCATION:{{ . }}{{ end }}
END:VEVENT
{{ end }}
END:VCALENDAR

View file

@ -3,13 +3,23 @@
import sys
import logging
import locale
from dateutil.parser import parse
from dateutil.parser import parse as _parse
from datetime import datetime, timedelta
from dateutil.rrule import rruleset, rrulestr
import icalendar
def parse(value):
# Some templates emit DTSTART with a trailing "Z" (e.g. 20260507T190000Z)
# which produces tz-aware datetimes, while others emit naive local times.
# Normalize to naive so comparisons and sorting don't mix the two.
dt = _parse(value)
if dt.tzinfo is not None:
dt = dt.replace(tzinfo=None)
return dt
def vevent_to_event(event, rrstart=None):
if rrstart == None:
begin = parse(event["DTSTART"].to_ical())