import icalendar import requests from server import * def get_next_meeting(): ical = requests.get(config['ICAL_URL']).content events = icalendar.Calendar.from_ical(ical).walk('VEVENT') now = datetime.now().date() delta = timedelta(weeks=2) meetings = [] for event in events: try: start = event['DTSTART'].dt.date() if event['SUMMARY'].upper() != 'VIDEO' or start < now or start > now+delta: continue meetings.append(event) except KeyError: pass if not meetings: return None, None event = sorted(meetings, key=lambda e: e['DTSTART'].dt)[0] return str(event['UID']), event['DTSTART'].dt.replace(tzinfo=None) @sched_func(60*60) def update_meeting(): uid, start = get_next_meeting() if uid is None: return text = 'Die nächste Video AG-Sitzung findet am %s ab %s Uhr in den Räumlichkeiten der Fachschaft im Augustinerbach 2a statt.'%( human_date(start), human_time(start)) modify('''REPLACE INTO announcements (extid, text, level, visible, time_publish, time_expire, time_created, time_updated, created_by) VALUES (?, ?, 0, true, ?, ?, ?, ?, 0)''', 'ical:'+uid, text, start-timedelta(days=7), start+timedelta(hours=2), datetime.now(), datetime.now())