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
|
#!./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
#### 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
print(events[e])
#### 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"]
#### Gen semester calendar
d=getmonday(sem["start"])
w=getweek(d)
while d<sem["end"]:
d=getnextmonday(d)
w+=1
|