#!./env/bin/python import yaml, textwrap from prettytable import PrettyTable from datetime import datetime, timedelta with open("infos.yaml", "r") as f: i=yaml.safe_load(f) def parse_date(d): return datetime.strptime(d, "%d/%m/%Y") 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 formatday(d): return d.strftime(i["output"]["date_format"]) def getassign(d): val="" for a in i["assigments"]: start=parse_date(i["assigments"][a]["start"]) end=parse_date(i["assigments"][a]["end"]) if d>=start and d<=end: if len(val)>0: val+="/" val+=str(a) return val def getlecture(d): for l in i["lectures"]: date=parse_date(i["lectures"][l]["date"]) if d==date: lecturer="" if i["output"]["show_lecturers"]: lecturer="\n ("+i["lectures"][l]["who"]+")" return textwrap.fill(i["lectures"][l]["name"]+lecturer,i["output"]["text_wrap"]) return "" def getevents(d): val="" for e in i["events"]: date=parse_date(i["events"][e]["date"]) if "hidden" in i["events"][e] and i["events"][e]["hidden"]: continue if d==date: if len(val)>0: val+="," val+=str(i["events"][e]["name"]) return textwrap.fill(val,i["output"]["text_wrap"]) sstart=parse_date(i["semester"]["start"]) send=parse_date(i["semester"]["end"]) d=sstart w=d.isocalendar().week if i["output"]["semester_dates_as_events"]: i["events"]["sstart_098888986"]={} # Add random numbers to avoid clash with users entries i["events"]["sstart_098888986"]["name"]="Semester starts" i["events"]["sstart_098888986"]["date"]=i["semester"]["start"] i["events"]["send_098888986"]={} i["events"]["send_098888986"]["name"]="Semester ends" i["events"]["send_098888986"]["date"]=i["semester"]["end"] while d <= send: t = PrettyTable(min_width=i["output"]["min_col_width"]) week="Week "+str(w) if i["output"]["show_weeks"] else "" t.field_names = [week, "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] if i["output"]["show_dates"]: t.add_row(["Date", formatday(getnextdayn(d, 0)), formatday(getnextdayn(d, 1)), formatday(getnextdayn(d, 2)), formatday(getnextdayn(d, 3)), formatday(getnextdayn(d, 4))],divider=True) if i["output"]["show_assigments"]: t.add_row(["Assigment", getassign(getnextdayn(d, 0)), getassign(getnextdayn(d, 1)), getassign(getnextdayn(d, 2)), getassign(getnextdayn(d, 3)), getassign(getnextdayn(d, 4))],divider=True) t.add_row(["Lecture", getlecture(getnextdayn(d, 0)), getlecture(getnextdayn(d, 1)), getlecture(getnextdayn(d, 2)), getlecture(getnextdayn(d, 3)), getlecture(getnextdayn(d, 4))],divider=True) if i["output"]["show_events"]: t.add_row(["Other", getevents(getnextdayn(d, 0)), getevents(getnextdayn(d, 1)), getevents(getnextdayn(d, 2)), getevents(getnextdayn(d, 3)), getevents(getnextdayn(d, 4))],divider=True) print(t) print() d=getnextmonday(d) w+=1