diff --git a/work_helpers/ics2table.py b/work_helpers/ics2table.py index 2650257..3ffa86b 100644 --- a/work_helpers/ics2table.py +++ b/work_helpers/ics2table.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timedelta from typing import Iterable import click @@ -12,8 +12,44 @@ ICAL_URL = "https://bwsyncandshare.kit.edu/remote.php/dav/public-calendars/69o9H ICS_DATE_FORMAT = "%Y%m%dT%H%M%S" GERMAN_DATE_FORMAT = "%d.%m.%Y %H:%M" +EARLIEST = datetime.now() - timedelta(days=30 * 3) +LATEST = datetime.now() + timedelta(days=30 * 6) + TABLE_COLUMN_ORDER = ("date", "location", "presenter") + +MAIL_RECIPIENTS = ",".join([ + "cpistaff@imtek.de", + "andrea.paola.layedra.almeida@uniklinik-freiburg.de", + "jaro.homburger@biologie.uni-freiburg.de", + "kubilay.acar@continental.com", + "Mario.diehlmann@basf.com", + "paul.fernandez@fmf.uni-freiburg.de", + "sunil.shetty@uniklinik-freiburg.de", + "sofia.genoves94@gmail.com", "sofia.genoves@yahoo.com.ar" +]) +MAIL_SUBJECT = "Updated Group Meeting Schedule" +MAIL_START = """ +Dear All, + +There is an updated group-seminar schedule available: +""" +MAIL_END = """ +If (and only if) you can't make it in person, you can join the presentations via zoom: https://uni-freiburg.zoom-x.de/j/62063730956?pwd=6poraREYWvuHkStuYDRvYhO4vhmTbt.1 + +Meeting-ID: 620 6373 0956 +Code: Lm5xaDXPH + +You can have a look in our group meeting calendar at: https://bwsyncandshare.kit.edu/apps/calendar/p/69o9HEM9aeZnER8S + +Or on our wiki: https://wiki.cpi.imtek.uni-freiburg.de/SeminarSchedule + +If you want to add the schedule to your calendar app of choice, please use this subscribe link: https://bwsyncandshare.kit.edu/remote.php/dav/public-calendars/69o9HEM9aeZnER8S/?export + +Best, +Holgi +""" + # parsers def _parse_text(ics_text:str) -> str: @@ -56,8 +92,13 @@ def get_ics(url:str) -> str: def extract_event_info(response:str) -> Events: - events = sorted(list(_extract_event_info(response)), key=lambda d: d["date"]) - for event in events: + + events = ( + event for event in + _extract_event_info(response) + if EARLIEST < event["date"][0] < LATEST + ) + for event in sorted(events, key=lambda d: d["date"]): yield {key: values[1] for key, values in event.items()} def _extract_event_info(response:str) -> Events: @@ -80,7 +121,7 @@ def extract_vevent(handle:Iterable[str]) -> dict[str:str]: return event -def create_table(events:Events) -> str: +def create_wiki_table(events:Events) -> str: table_meta_data = _get_table_meta_data(events) headers = {key: f"'''{key.capitalize()}'''" for key in TABLE_COLUMN_ORDER} lines = [ @@ -105,12 +146,37 @@ def _get_table_meta_data(events:Events) -> dict[str:int]: return meta +def create_email_table(events:Events) -> str: + table_meta_data = _get_table_meta_data(events) + date_key, _, name_key = TABLE_COLUMN_ORDER + pad_date = table_meta_data[date_key] + lines = [ + (event[date_key].ljust(pad_date) + " | " + event[name_key]) for event in events + ] + return "\n".join(lines) + @click.command() def group_schedule(): ics_file = get_ics(ICAL_URL) events = list(extract_event_info(ics_file)) - table = create_table(events) - print(table) - pyperclip.copy(table) \ No newline at end of file + wiki_table = create_wiki_table(events) + email_table = create_email_table(events) + + components = [ + wiki_table, + "", + "", + "", + MAIL_RECIPIENTS, + "", + MAIL_SUBJECT, + MAIL_START, + email_table, + MAIL_END + ] + + text = "\n".join(components) + print(text) + pyperclip.copy(text) \ No newline at end of file