#!./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 def getdayname(d): return d.strftime("%A").lower() #### Formatting def gettime(d): return d.strftime("%H:%M") def formatevents(d): output="" for e in events: _e=events[e] if (not _e["hidden"]) and (_e["date"].date() == d.date() or (_e["weekly"] and (_e["date"].weekday()==d.weekday()) and _e["date"].date()<=d.date())): if _e["start"] is not None: output+=gettime(_e["start"])+"-"+gettime(_e["end"])+"\n" if _e["room"] is not None: output+="Room: "+_e["room"]+"\n" output+=_e["name"] return output #### 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"] #### 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 events[e]["weekly"]=_e["weekly"] if "weekly" in _e.keys() else False if _e["type"] in sem["slots"].keys(): dayname=getdayname(events[e]["date"]) if events[e]["start"] is None: events[e]["start"] = sem["slots"][_e["type"]][dayname]["start"] if events[e]["end"] is None: events[e]["end"] = sem["slots"][_e["type"]][dayname]["end"] if events[e]["room"] is None: events[e]["room"] = sem["slots"][_e["type"]][dayname]["room"] #### Gen semester calendar d=getmonday(sem["start"]) w=getweek(d) while d