-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimport_gapi.py
146 lines (119 loc) · 4.15 KB
/
import_gapi.py
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
from functools import reduce
from import_gapi_req import get
from data_model import Bénévole, Spectacle, Lieu, Type_de_quête, Quête
from xlrd import xldate_as_datetime
from datetime import date, time, datetime, timedelta
def to_bool(s):
return True if s == "TRUE" else False
def load_lieux(data):
lieux = data["lieux"]
for p in lieux:
id = str(p["id"])
nom = p["nom"]
Lieu(id, nom)
def load_types(data):
types = data["types_de_quêtes"]
for t in types:
id = str(t["id"])
nom = t["nom"]
sécable = to_bool(t["découpable"])
spécialiste_only = to_bool(t["only_spe"])
Type_de_quête(id, nom, sécable, spécialiste_only)
def to_datetime(date):
if date:
return xldate_as_datetime(date, 0)
return None
def split(s):
return [] if s == None or s == "" else s.split(",")
def load_bénévoles(data):
bénévoles = data["bénévoles"]
for b in bénévoles:
def pref_of_hour(hour):
def score_of(s):
if s == "Contraint":
return -1
if s == "Préféré":
return 1
return 0
if 0 <= hour and hour <= 5:
return score_of(b["nuit"])
if 6 <= hour and hour <= 11:
return score_of(b["matin"])
if 12 <= hour and hour <= 17:
return score_of(b["aprem"])
if 18 <= hour and hour <= 23:
return score_of(b["soir"])
def make_pref_horaires():
acc = {}
for h in range(0, 23 + 1):
acc[time(hour=h)] = pref_of_hour(h)
return acc
def make_indisponibilités():
indisponibilités = []
if b["nuit"] == "Indisponible":
for h in range(0, 6):
indisponibilités.append(time(hour=h))
if b["matin"] == "Indisponible":
for h in range(6, 12):
indisponibilités.append(time(hour=h))
if b["aprem"] == "Indisponible":
for h in range(12, 18):
indisponibilités.append(time(hour=h))
if b["soir"] == "Indisponible":
for h in range(18, 24):
indisponibilités.append(time(hour=h))
return indisponibilités
id = str(b["id"])
surnom = b["pseudo"]
prénom = ""
nom = ""
heures_théoriques = b["heures_théoriques"]
indisponibilités = make_indisponibilités()
pref_horaires = make_pref_horaires()
sérénité = True # TODO avec les "quêtes interdites"
binômes_préférés = split(b["amis"])
binômes_interdits = split(b["ennemis"])
types_de_quête_interdits = split(b["quêtes_interdites"])
spécialités = split(b["spécialités"])
date_arrivée = to_datetime(b["arrivée"])
date_départ = to_datetime(b["départ"])
Bénévole(
id,
surnom,
prénom,
nom,
heures_théoriques,
indisponibilités,
pref_horaires,
sérénité,
binômes_préférés,
binômes_interdits,
types_de_quête_interdits,
spécialités,
date_arrivée,
date_départ,
)
def load_quêtes(data):
quêtes = data["quêtes"]
# TODO GROUPES
for q in quêtes:
id = str(q["id"])
nom = str(q["nom"])
types = list(map(Type_de_quête.tous.get, split(q["types"])))
lieu = Lieu.tous[str(q["lieu"])]
spectacle = None
nombre_bénévoles = int(q["nombre_bénévoles"])
début = to_datetime(q["début"])
fin = to_datetime(q["fin"])
bénévoles = list(map(Bénévole.tous.get, split(q["fixés"])))
Quête(id, nom, types, lieu, spectacle, nombre_bénévoles, début, fin, bénévoles)
def main():
data = get()
if not (data is None):
load_lieux(data)
load_types(data)
load_bénévoles(data)
load_quêtes(data)
Bénévole.strengthen()
if __name__ == "__main__":
main()