From 1e929110b2df0f9fdaffaacb132e6dc9bc692c96 Mon Sep 17 00:00:00 2001 From: Loïc Guégan Date: Sat, 26 Jul 2025 20:55:13 +0200 Subject: Minor changes --- main.py | 307 ++++++++++++++++++++++++++-------------------------------------- 1 file changed, 124 insertions(+), 183 deletions(-) (limited to 'main.py') diff --git a/main.py b/main.py index 460b174..5287a45 100755 --- a/main.py +++ b/main.py @@ -5,203 +5,144 @@ from prettytable import PrettyTable from datetime import datetime, timedelta with open("infos.yaml", "r") as f: - i=yaml.safe_load(f) + _i=yaml.safe_load(f) -def parse_date(d): - return datetime.strptime(d, "%d/%m/%Y") +#### 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 formatday(d): - return d.strftime(i["output"]["date_format"]) def getweek(d): - return d.isocalendar().week + i["output"]["week_drift"] -def getgloballectureslot(d): - dname=d.strftime("%A").lower() - slots=i["semester"]["lectures"]["slots"] - if dname in slots.keys(): - start,end, room=(None,None,None) - if "start" in slots[dname].keys(): - start=datetime.strptime(i["semester"]["lectures"]["slots"][dname]["start"], "%H:%M") - end=datetime.strptime(i["semester"]["lectures"]["slots"][dname]["end"], "%H:%M") - room=slots[dname]["room"] if "room" in slots[dname].keys() else None - return (start,end, room) - return None -def getglobalcolloquiumsslot(d): - dname=d.strftime("%A").lower() - slots=i["semester"]["colloquiums"]["slots"] - if dname in slots.keys(): - start,end, room=(None,None,None) - if "start" in slots[dname].keys(): - start=datetime.strptime(i["semester"]["colloquiums"]["slots"][dname]["start"], "%H:%M") - end=datetime.strptime(i["semester"]["colloquiums"]["slots"][dname]["end"], "%H:%M") - room=slots[dname]["room"] if "room" in slots[dname].keys() else None - return (start,end, room) - return None -def getassign(d): - val="" - for a in i["assignments"]: - start=parse_date(i["assignments"][a]["start"]) - end=parse_date(i["assignments"][a]["end"]) - if d>=start and d<=end: - if len(val)>0: - val+="/" - val+=str(a) - return val -def getlecture(d): - slot=getgloballectureslot(d) - for l in i["lectures"]: - date=parse_date(i["lectures"][l]["date"]) - if d==date: - # Time - startT, endT, room = (None, None, None) - if slot is not None: - startT, endT, room=slot - if "slot" in i["lectures"][l]: - if "start" in i["lectures"][l]["slot"].keys(): - startT=datetime.strptime(i["lectures"][l]["slot"]["start"], "%H:%M") - endT=datetime.strptime(i["lectures"][l]["slot"]["end"], "%H:%M") - room=i["lectures"][l]["slot"]["room"] if "room" in i["lectures"][l]["slot"].keys() else None - # Content - text=textwrap.fill(i["lectures"][l]["name"],o["text_wrap"]) - if o["show_lecturers"]: - text+="\n"+textwrap.fill("("+i["lectures"][l]["who"]+")",o["text_wrap"]) - if o["show_room"] and room is not None: - text=textwrap.fill(o["labels"]["rooms"].format(room),o["text_wrap"])+"\n"+text - if o["show_time"] and (startT,endT) != (None, None): - timeT=textwrap.fill(startT.strftime(i["output"]["time_format"])+"-"+endT.strftime(i["output"]["time_format"]),o["text_wrap"]) - text=timeT+"\n"+text - return text - 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,o["text_wrap"]) -def add_row(t,row): - if not o["defrag"] or any(len(x) > 0 for x in row[1:]): - t.add_row(row,divider=True) - return 1 - return 0 - -if not i["output"]["tables"]["calendar"]["hidden"]: - sstart=parse_date(i["semester"]["start"]) - send=parse_date(i["semester"]["end"]) - d=sstart - w=getweek(d) - o=i["output"]["tables"]["calendar"] - if o["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=o["min_col_width"]) - week=o["labels"]["weeks"].format(w) if o["show_weeks"] else "" - t.field_names = [week, "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] - t.align[week]="l" - rcount=0 - if o["show_dates"]: - add_row(t,[o["labels"]["dates"], - formatday(getnextdayn(d, 0)), - formatday(getnextdayn(d, 1)), - formatday(getnextdayn(d, 2)), - formatday(getnextdayn(d, 3)), - formatday(getnextdayn(d, 4))]) - if o["show_assignments"]: - rcount+=add_row(t,[o["labels"]["assignments"], - getassign(getnextdayn(d, 0)), - getassign(getnextdayn(d, 1)), - getassign(getnextdayn(d, 2)), - getassign(getnextdayn(d, 3)), - getassign(getnextdayn(d, 4))]) - rcount+=add_row(t,[o["labels"]["lectures"], - getlecture(getnextdayn(d, 0)), - getlecture(getnextdayn(d, 1)), - getlecture(getnextdayn(d, 2)), - getlecture(getnextdayn(d, 3)), - getlecture(getnextdayn(d, 4))]) - if o["show_events"]: - rcount+=add_row(t,[o["labels"]["events"], - getevents(getnextdayn(d, 0)), - getevents(getnextdayn(d, 1)), - getevents(getnextdayn(d, 2)), - getevents(getnextdayn(d, 3)), - getevents(getnextdayn(d, 4))]) - print(t.get_formatted_string(i["output"]["format"])) - for j in range(0,o["week_line_skip"]): - print("") - d=getnextmonday(d) - w+=1 + return d.isocalendar().week +def getdayname(d): + return d.strftime("%A").lower() +#### Formatting +def gettime(d): + return d.strftime("%H:%M") +def matchrepeat(d,e): + _r=events[e]["repeat"] + if _r["every"] <= 0: + return False + delta=timedelta(days=_r["every"]) + current=events[e]["date"] + while current.date() <= sem["end"].date(): + if _r["until"] is not None and _r["until"].date()