summaryrefslogtreecommitdiff
path: root/main2.py
blob: 9651aad29f5f47c74f38e46280ab0b5a7b59b0ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!./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<sem["end"]:
    t = PrettyTable()
    t.field_names = ["Week "+str(w), "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
    t.add_row(["",
               formatevents(getnextdayn(d, 0)),
               formatevents(getnextdayn(d, 1)),
               formatevents(getnextdayn(d, 2)),
               formatevents(getnextdayn(d, 3)),
               formatevents(getnextdayn(d, 4))])
    print(t)
    d=getnextmonday(d)
    w+=1
    if d<sem["end"]:
        print("")