Browse Source

filtering based on date, also exporting mail text

master
Holger Frey 5 months ago
parent
commit
279f1cee0d
  1. 80
      work_helpers/ics2table.py

80
work_helpers/ics2table.py

@ -1,4 +1,4 @@ @@ -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 @@ -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: @@ -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]: @@ -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]: @@ -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)
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)
Loading…
Cancel
Save