From 34125d783c31accc2b5eefec3f031ae05c0800ee Mon Sep 17 00:00:00 2001 From: Holger Frey Date: Tue, 3 Mar 2026 17:39:58 +0100 Subject: [PATCH] cleaned up typing information --- work_helpers/ics2table.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/work_helpers/ics2table.py b/work_helpers/ics2table.py index 3ffa86b..f266ffb 100644 --- a/work_helpers/ics2table.py +++ b/work_helpers/ics2table.py @@ -5,7 +5,10 @@ import click import pyperclip import requests -Events = Iterable[dict[str:str]] +# typing +RawEvent = dict[str:tuple[str|datetime,str]] +Event = dict[str:str] +TableMetaData = dict[str:int] ICAL_URL = "https://bwsyncandshare.kit.edu/remote.php/dav/public-calendars/69o9HEM9aeZnER8S/?export" @@ -17,6 +20,7 @@ LATEST = datetime.now() + timedelta(days=30 * 6) TABLE_COLUMN_ORDER = ("date", "location", "presenter") +# for mail sending MAIL_RECIPIENTS = ",".join([ "cpistaff@imtek.de", @@ -91,8 +95,7 @@ def get_ics(url:str) -> str: return response.text -def extract_event_info(response:str) -> Events: - +def extract_event_info(response:str) -> Iterable[Event]: events = ( event for event in _extract_event_info(response) @@ -101,13 +104,13 @@ def extract_event_info(response:str) -> Events: 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: +def _extract_event_info(response:str) -> Iterable[RawEvent]: handle = (line for line in response.splitlines()) for line in handle: if line.upper().startswith("BEGIN:VEVENT"): yield extract_vevent(handle) -def extract_vevent(handle:Iterable[str]) -> dict[str:str]: +def extract_vevent(handle:Iterable[str]) -> RawEvent: event = {} for line in handle: if line.upper().startswith("END:VEVENT"): @@ -121,7 +124,7 @@ def extract_vevent(handle:Iterable[str]) -> dict[str:str]: return event -def create_wiki_table(events:Events) -> str: +def create_wiki_table(events:Iterable[Event]) -> str: table_meta_data = _get_table_meta_data(events) headers = {key: f"'''{key.capitalize()}'''" for key in TABLE_COLUMN_ORDER} lines = [ @@ -132,13 +135,13 @@ def create_wiki_table(events:Events) -> str: return "\n".join(lines) -def _create_table_line(line, meta) -> str: - columns = [line[key].ljust(meta[key]) for key in TABLE_COLUMN_ORDER] +def _create_table_line(event:Event, meta:TableMetaData) -> str: + columns = [event[key].ljust(meta[key]) for key in TABLE_COLUMN_ORDER] inner = " || ".join(columns) return f"|| {inner} ||" -def _get_table_meta_data(events:Events) -> dict[str:int]: +def _get_table_meta_data(events:Iterable[Event]) -> TableMetaData: meta = {} for event in events: for key, value in event.items(): @@ -146,7 +149,7 @@ def _get_table_meta_data(events:Events) -> dict[str:int]: return meta -def create_email_table(events:Events) -> str: +def create_email_table(events:Iterable[Event]) -> str: table_meta_data = _get_table_meta_data(events) date_key, _, name_key = TABLE_COLUMN_ORDER pad_date = table_meta_data[date_key]