#!./env/bin/python import yaml, textwrap from prettytable import PrettyTable from datetime import datetime, timedelta with open("infos2.yaml", "r") as f: _i=yaml.safe_load(f) #### Parsing def parse_date(s): return datetime.strptime(s, "%d/%m/%Y") def parse_time(s): return datetime.strptime(s, "%H:%M") #### Dates def getmonday(d): return d - timedelta(days=d.weekday()) def getnextmonday(d): return getmonday(d)+timedelta(days=7) def getnextdayn(d,n): return (d+timedelta(days=n)) def getweek(d): return d.isocalendar().week #### Load events events={} for e in _i["events"]: _e=_i["events"][e] events[e]={ "type": _e["type"], "name": _e["name"], "date": parse_date(_e["date"]), } events[e]["hidden"]=_e["hidden"] if "hidden" in _e.keys() else False events[e]["who"]=_e["who"] if "who" in _e.keys() else None events[e]["start"]=parse_time(_e["start"]) if "start" in _e.keys() else None events[e]["end"]=parse_time(_e["end"]) if "end" in _e.keys() else None events[e]["room"]=_e["room"] if "room" in _e.keys() else None print(events[e]) #### Load semester sem={ "start": parse_date(_i["semester"]["start"]), "end": parse_date(_i["semester"]["end"]), "slots": {} } for e in _i["semester"]["slots"]: _e=_i["semester"]["slots"][e] sem["slots"][e]={} for dayname in ["monday","tuesday","wednesday","thursday","friday"]: sem["slots"][e][dayname]={ "start": None, "end": None, "room": None } if dayname in _e.keys(): if "start" in _e[dayname].keys(): sem["slots"][e][dayname]["start"]=parse_time(_e[dayname]["start"]) sem["slots"][e][dayname]["end"]=parse_time(_e[dayname]["end"]) if "room" in _e[dayname].keys(): sem["slots"][e][dayname]["room"]=_e[dayname]["room"] #### Gen semester calendar d=getmonday(sem["start"]) w=getweek(d) while d