refacture all the things!

This commit is contained in:
XenGi 2023-06-13 12:47:07 +02:00
parent 9a7b9ba2c0
commit 2e3a02af0c
Signed by: xengi
SSH key fingerprint: SHA256:EvLbWxFCtfmd+8Xa6RkzkhIga+wFkKCekfFacYVn63M
12 changed files with 169 additions and 153 deletions

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/bin/sh
if [ $# -lt 2 ]; then
echo "Usage: $0 Mediawiki_Page_Name [page|post]"
@ -7,9 +7,12 @@ fi
echo Converting $1...
page=$(echo $1 | sed 's,/,_,g'|tr '[:upper:]' '[:lower:]')
page=$(echo $1 | sed 's,/,_,g' | tr '[:upper:]' '[:lower:]')
hugo new $2/$page.md
curl -s https://berlin.ccc.de/api.php\?action\=query\&prop\=revisions\&rvprop\=content\&format\=json\&titles\=$1 | \
jq -r '.query.pages |..| objects|.["*"]'| sed '/null/d' | pandoc -f mediawiki -t markdown \
curl -s "https://berlin.ccc.de/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=$1" \
| jq -r '.query.pages |..| objects|.["*"]' \
| sed '/null/d' \
| pandoc -f mediawiki -t markdown \
>> content/$2/$page.md

View file

@ -3,7 +3,6 @@
import sys
import logging
import locale
from pprint import pprint
from dateutil.parser import parse
from datetime import datetime, timedelta
from dateutil.rrule import rruleset, rrulestr
@ -12,79 +11,83 @@ import icalendar
def vevent_to_event(event, rrstart=None):
if rrstart == None:
begin = parse(event['DTSTART'].to_ical())
else:
begin = rrstart
return { "name": event['SUMMARY'].to_ical(), "url": event['URL'].to_ical(), "begin": begin }
if rrstart == None:
begin = parse(event["DTSTART"].to_ical())
else:
begin = rrstart
return {
"name": event["SUMMARY"].to_ical(),
"url": event["URL"].to_ical(),
"begin": begin
}
def parse_single_event(event, start, end):
logging.info("Processing single event %s" % event['SUMMARY'].to_ical().decode('utf-8'))
dtstart = parse(event['DTSTART'].to_ical())
if dtstart >= start and dtstart < end:
return vevent_to_event(event)
else:
return None
logging.info(f"Processing single event {event['SUMMARY'].to_ical().decode('utf-8')}")
dtstart = parse(event["DTSTART"].to_ical())
if dtstart >= start and dtstart < end:
return vevent_to_event(event)
def parse_recurring_event(event, start, end):
logging.info("Processing recurring event %s" % event['SUMMARY'].to_ical().decode('utf-8'))
dtstart = parse(event['DTSTART'].to_ical())
rs = rruleset()
rs.rrule(rrulestr(event['RRULE'].to_ical().decode('utf-8'), dtstart=dtstart))
if 'EXDATE' in event.keys():
exdates = event['EXDATE']
for exdate in exdates:
rs.exdate(parse(exdate.to_ical()))
logging.info(f"Processing recurring event {event['SUMMARY'].to_ical().decode('utf-8')}")
dtstart = parse(event["DTSTART"].to_ical())
rs = rruleset()
rs.rrule(rrulestr(event["RRULE"].to_ical().decode("utf-8"), dtstart=dtstart))
if "EXDATE" in event.keys():
for exdate in event["EXDATE"]:
rs.exdate(parse(exdate.to_ical()))
dates = list(rs)
events = []
for date in dates:
if date >= start and date < end:
events.append(vevent_to_event(event, date))
return events
events = []
for date in list(rs):
if date >= start and date < end:
events.append(vevent_to_event(event, date))
return events
def find_events(icsfilestr, start, end, num):
with open(icsfilestr, 'r') as icsfile:
cal=icalendar.Calendar.from_ical(icsfile.read())
with open(icsfilestr, "r") as icsfile:
cal = icalendar.Calendar.from_ical(icsfile.read())
events=[]
for event in cal.subcomponents:
if event.name == 'VEVENT':
if 'RRULE' in event.keys():
events = events + parse_recurring_event(event, start, end)
else:
ev = parse_single_event(event, start, end)
if ev != None:
events.append(ev)
events = []
for event in cal.subcomponents:
if event.name == "VEVENT":
if "RRULE" in event.keys():
events.append(parse_recurring_event(event, start, end))
elif ev := parse_single_event(event, start, end) != None:
events.append(ev)
events = sorted(events, key=lambda k: k['begin'])
events = events[0:num]
return events
events = sorted(events, key=lambda k: k["begin"])
events = events[0:num]
return events
def format_events(events):
print('<table class="table table-condensed">')
for event in events:
dateStr = event['begin'].strftime("%A, %d.%m um %H:%M Uhr")
#print("<li><a href=\"%s\">%s: %s</a></li>" % (event['url'].decode('utf-8'), dateStr, event['name'].decode('utf-8')))
print("<tr><td>%s</td><td><a href=\"%s\">%s</a></td></tr>"
% (dateStr, event['url'].decode('utf-8'), event['name'].decode('utf-8')))
print('</table>')
print("<table class=\"table table-condensed\">")
for event in events:
print(
"<tr>"
f"<td>{event['begin'].strftime('%A, %d.%m um %H:%M Uhr')}</td>"
f"<td><a href=\"{event['url'].decode('utf-8')}\">{event['name'].decode('utf-8')}</a></td>"
"</tr>"
)
print("</table><!--/.table /.table-condensed-->")
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: %s calendar max_days max_items" % sys.argv[0])
sys.exit(-1)
if len(sys.argv) < 3:
print(f"Usage: {sys.argv[0]} calendar max_days max_items")
sys.exit(-1)
locale.setlocale(locale.LC_TIME, "de_DE.UTF-8")
calendar=sys.argv[1]
max_days=int(sys.argv[2])
max_items=int(sys.argv[3])
locale.setlocale(locale.LC_TIME, "de_DE.UTF-8")
calendar = sys.argv[1]
max_days = int(sys.argv[2])
max_items = int(sys.argv[3])
events=find_events(calendar, datetime.now(), datetime.now() + timedelta(days=max_days), max_items)
format_events(events)
now = datetime.now()
events = find_events(calendar, now, now + timedelta(days=max_days), max_items)
format_events(events)

View file

@ -6,22 +6,22 @@ import pytz
import icalendar
cals = []
calendars = []
merged = icalendar.Calendar()
merged.add('prodid', '-//CCCB Calendar Generator//berlin.ccc.de//')
merged.add('version', '2.0')
merged.add("prodid", "-//CCCB Calendar Generator//berlin.ccc.de//")
merged.add("version", "2.0")
for icsfilestr in glob('public/*/**/*.ics', recursive=True):
with open(icsfilestr, 'r') as icsfile:
print('Importing', icsfilestr)
cals.append(icalendar.Calendar.from_ical(icsfile.read()))
for icsfilestr in glob("public/*/**/*.ics", recursive=True):
with open(icsfilestr, "r") as icsfile:
print(f"Importing {icsfilestr}")
calendars.append(icalendar.Calendar.from_ical(icsfile.read()))
for cal in cals:
for e in cal.subcomponents:
merged.add_component(e)
for calendar in calendars:
for event in calendar.subcomponents:
merged.add_component(event)
outfile = 'static/all.ics'
with open(outfile, 'wb') as f:
print(f'writing to {outfile}...')
outfile = "static/all.ics"
with open(outfile, "wb") as f:
print(f"writing to {outfile}...")
f.write(merged.to_ical())