#!/bin/python3 #lumbung.space calendar feed generator #© 2021 roel roscam abbing gplv3 etc from ics import Calendar import requests import jinja2 import os from slugify import slugify from natural import date from event_feed_config import calendar_url, output_dir cal = Calendar(requests.get(calendar_url).text) env = jinja2.Environment( loader=jinja2.FileSystemLoader(os.path.curdir) ) if not os.path.exists(output_dir): os.mkdir(output_dir) template = env.get_template('event_template.md') existing_posts = os.listdir(output_dir) # Dates need to be displayed for the various TZs # 3 PM Kassel, Germany, 4 PM Ramallah/Jerusalem, Palestina (QoF), # 8 AM Bogota, Colombia (MaMa), 8 PM Jakarta, Indonesia (Gudskul), # 1 PM (+1day) Wellington, New Zealand (Fafswag), 9 AM Havana, Cuba (Instar). tzs = [ ('Kassel','Europe/Berlin'), ('Bamako', 'Europe/London'), ('Palestine','Asia/Jerusalem'), ('Bogota','America/Bogota'), ('Jakarta','Asia/Jakarta'), ('Makassar','Asia/Makassar'), ('Wellington', 'Pacific/Auckland') ] for event in list(cal.events): localized_begins =[] for i in tzs: localized_begins.append( #javascript formatting because of string creation from hell '__{}__ {}'.format( str(i[0]), str(event.begin.to(i[1]).format("YYYY-MM-DD HH:mm")) ) ) event_metadata = { 'name':event.name, 'created':event.created.format(), 'description': event.description, 'begin': '        '.join(localized_begins), #non-breaking space characters to defeat markdown 'end': event.end.format(), 'duration': date.compress(event.duration), 'location': event.location } #FIXME: There is no deletion logic #FIXME: figure out how to use legible yet unique post names #FIXME: An update logic? post_dir = os.path.join(output_dir, slugify(event.name)) + '-' + slugify(event.begin.format("YYYY-MM-DD")) if not os.path.exists(post_dir): os.mkdir(post_dir) with open(os.path.join(post_dir,'index.md'),'w') as f: post = template.render(event = event_metadata) f.write(post)