Browse Source

cleaned up typing information

master
Holger Frey 4 months ago
parent
commit
34125d783c
  1. 23
      work_helpers/ics2table.py

23
work_helpers/ics2table.py

@ -5,7 +5,10 @@ import click @@ -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) @@ -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: @@ -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: @@ -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]: @@ -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: @@ -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]: @@ -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]

Loading…
Cancel
Save