From 243e1ab99e00c22bf6d568e26f8123dac0243120 Mon Sep 17 00:00:00 2001 From: Loïc Guégan Date: Fri, 25 Jul 2025 11:42:24 +0200 Subject: Minor changes --- infos.yaml | 41 ++++++++++-------- main.py | 138 +++++++++++++++++++++++++++++++++++++------------------------ 2 files changed, 107 insertions(+), 72 deletions(-) diff --git a/infos.yaml b/infos.yaml index cf166a3..fd19652 100644 --- a/infos.yaml +++ b/infos.yaml @@ -5,23 +5,30 @@ semester: end: "15/12/2025" output: - show_events: yes - show_lecturers: yes - show_assigments: yes - show_dates: yes - show_weeks: yes - semester_dates_as_events: no # Display semester start/end in events - defrag: yes # Skip empty rows date_format: "%b %d" - text_wrap: 15 - min_col_width: 12 - week_line_skip: 1 # Number of line to skip between weeks - labels: - events: "Others" - lectures: "Lectures" - assignments: "Assignments" - dates: "Dates" - weeks: "Week {}" + tables: + calendar: + hidden: no + show_events: yes + show_lecturers: yes + show_assignments: yes + show_dates: yes + show_weeks: yes + semester_dates_as_events: no # Display semester start/end in events + defrag: yes # Skip empty rows + text_wrap: 15 + min_col_width: 12 + week_line_skip: 1 # Number of line to skip between weeks + labels: + events: "Others" + lectures: "Lectures" + assignments: "Assignments" + dates: "Dates" + weeks: "Week {}" + deadlines: + hidden: no + msg_handout: "Mandatory assignment {} handout" + msg_deadline: "Mandatory assignment {} deadline" events: 1: @@ -32,7 +39,7 @@ events: name: "Exam" date: "03/12/2025" -assigments: +assignments: 1: start: "01/09/2025" end: "17/09/2025" diff --git a/main.py b/main.py index b3ce9fd..e70e2b1 100755 --- a/main.py +++ b/main.py @@ -19,9 +19,9 @@ 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"]) + 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+="/" @@ -31,9 +31,9 @@ def getlecture(d): for l in i["lectures"]: date=parse_date(i["lectures"][l]["date"]) if d==date: - text=textwrap.fill(i["lectures"][l]["name"],i["output"]["text_wrap"]) - if i["output"]["show_lecturers"]: - text+="\n"+textwrap.fill("("+i["lectures"][l]["who"]+")",i["output"]["text_wrap"]) + 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"]) return text return "" def getevents(d): @@ -46,58 +46,86 @@ def getevents(d): if len(val)>0: val+="," val+=str(i["events"][e]["name"]) - return textwrap.fill(val,i["output"]["text_wrap"]) + return textwrap.fill(val,o["text_wrap"]) def add_row(t,row): - if not i["output"]["defrag"] or any(len(x) > 0 for x in row[1:]): + if not o["defrag"] or any(len(x) > 0 for x in row[1:]): t.add_row(row,divider=True) return 1 return 0 -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=i["output"]["labels"]["weeks"].format(w) if i["output"]["show_weeks"] else "" - t.field_names = [week, "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] - rcount=0 - if i["output"]["show_dates"]: - add_row(t,[i["output"]["labels"]["dates"], - formatday(getnextdayn(d, 0)), - formatday(getnextdayn(d, 1)), - formatday(getnextdayn(d, 2)), - formatday(getnextdayn(d, 3)), - formatday(getnextdayn(d, 4))]) - if i["output"]["show_assigments"]: - rcount+=add_row(t,[i["output"]["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,[i["output"]["labels"]["lectures"], - getlecture(getnextdayn(d, 0)), - getlecture(getnextdayn(d, 1)), - getlecture(getnextdayn(d, 2)), - getlecture(getnextdayn(d, 3)), - getlecture(getnextdayn(d, 4))]) - if i["output"]["show_events"]: - rcount+=add_row(t,[i["output"]["labels"]["events"], - getevents(getnextdayn(d, 0)), - getevents(getnextdayn(d, 1)), - getevents(getnextdayn(d, 2)), - getevents(getnextdayn(d, 3)), - getevents(getnextdayn(d, 4))]) +if not i["output"]["tables"]["calendar"]["hidden"]: + sstart=parse_date(i["semester"]["start"]) + send=parse_date(i["semester"]["end"]) + d=sstart + w=d.isocalendar().week + 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) + for j in range(0,o["week_line_skip"]): + print("") + d=getnextmonday(d) + w+=1 + +if not i["output"]["tables"]["deadlines"]["hidden"]: + # Count weeks + days={} + for a in i["assignments"]: + start=parse_date(i["assignments"][a]["start"]) + end=parse_date(i["assignments"][a]["end"]) + if start not in days.keys(): + days[start]=list() + if end not in days.keys(): + days[end]=list() + days[start].append((a,"start")) + days[end].append((a,"end")) + # Build table + t = PrettyTable() + t.field_names = ["Week", "Date", "Assignment"] + for d in sorted(days.keys()): + for (a,b) in days[d]: + if b=="start": + msg=i["output"]["tables"]["deadlines"]["msg_handout"].format(a) + else: + msg=i["output"]["tables"]["deadlines"]["msg_deadline"].format(a) + t.add_row([d.isocalendar().week,formatday(d),msg]) + t.align["Assignment"] = "l" print(t) - for j in range(0,i["output"]["week_line_skip"]): - print("") - d=getnextmonday(d) - w+=1 -- cgit v1.2.3