Compare commits

..
5 changed files with 44 additions and 11 deletions

View file

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

View file

@ -0,0 +1,21 @@
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

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<events>
{{ range .Pages }}
<event>
<title>{{ .Title }}</title>
<link>{{ .Permalink }}</link>
<date>{{ .Date.Format "2006-01-02" }}</date>
<description>{{ .Summary | plainify }}</description>
{{ with .Params.location }}<location>{{ . }}</location>{{ end }}
</event>
{{ end }}
</events>

View file

@ -0,0 +1,21 @@
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,23 +3,13 @@
import sys import sys
import logging import logging
import locale import locale
from dateutil.parser import parse as _parse from dateutil.parser import parse
from datetime import datetime, timedelta from datetime import datetime, timedelta
from dateutil.rrule import rruleset, rrulestr from dateutil.rrule import rruleset, rrulestr
import icalendar 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): def vevent_to_event(event, rrstart=None):
if rrstart == None: if rrstart == None:
begin = parse(event["DTSTART"].to_ical()) begin = parse(event["DTSTART"].to_ical())