-
Notifications
You must be signed in to change notification settings - Fork 0
/
ide.py
118 lines (100 loc) · 3.47 KB
/
ide.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
from flask import Flask, abort, jsonify, render_template, request, send_file
from time import time
from urllib.parse import unquote
from init import acces_ouverts, salons
app = Flask(__name__)
def page_apprenant(salon):
if request.method == 'GET':
return send_file('ide.html')
recu = request.json
envoi = {}
timestamp = round(time() * 1000)
apprenants = salon['apprenants']
liste_assistances = salon['liste_assistances']
# recherche de l'apprenant et création d'un nouveau si inconnu
try:
identifiant = unquote(request.cookies['identifiant'])
except: abort(400)
assert identifiant != ''
apprenant = apprenants.setdefault(identifiant, {
'present': True,
'code': '',
'console': '',
'dernier_envoi': 0,
'activite': []})
# gestion des entrées/sorties dans le salon
activite = apprenant['activite']
if 'sortie' in recu:
apprenant['present'] = False
if apprenant in liste_assistances:
liste_assistances.remove(apprenant)
activite.append((timestamp, 'sortie'))
return ('', 204)
if not apprenant['present']:
apprenant['present'] = True
activite.append((timestamp, 'entree'))
if 'nom_salon' in recu:
envoi['nom_salon'] = salon['nom_salon']
# gestion des demandes d'assistance
demande_assistance = recu.get('demande_assistance', None)
if demande_assistance == True and not apprenant in liste_assistances:
liste_assistances.append(apprenant)
elif demande_assistance == False and apprenant in liste_assistances:
liste_assistances.remove(apprenant)
if apprenant in liste_assistances:
envoi['position_assistance'] = liste_assistances.index(apprenant) + 1
# réception de code
if 'code' in recu and 'console' in recu:
apprenant['code'] = recu['code']
apprenant['console'] = recu['console']
apprenant['dernier_envoi'] = timestamp
activite.append((timestamp, 'envoi_code'))
return jsonify(envoi)
def page_enseignant(salon):
if request.method == 'GET':
return send_file('mosaique.html')
recu = request.json
envoi = {}
# lecture de l'action et traitements spécifiques
action = request.args['action']
if action == 'maj_mosaique':
apprenants = salon['apprenants']
liste_assistances = salon['liste_assistances']
for nom_apprenant in recu['fin_assistance']:
apprenant = apprenants[nom_apprenant]
if apprenant in liste_assistances:
liste_assistances.remove(apprenant)
if 'nom_salon' in recu:
envoi['nom_salon'] = salon['nom_salon']
envoi_apprenants = envoi['apprenants'] = []
for identifiant, apprenant in apprenants.items():
envoi_apprenant = {}
envoi_apprenants.append(envoi_apprenant)
envoi_apprenant['nom_apprenant'] = identifiant
envoi_apprenant['present'] = apprenant['present']
if apprenant in liste_assistances:
envoi_apprenant['position_assistance'] = liste_assistances.index(apprenant) + 1
if 'nom_apprenant' in recu:
nom_apprenant = recu['nom_apprenant']
apprenant = apprenants[nom_apprenant]
envoi['nom_apprenant'] = nom_apprenant
envoi['code'] = apprenant['code']
envoi['console'] = apprenant['console']
envoi['dernier_envoi'] = apprenant['dernier_envoi']
return jsonify(envoi)
@app.route('/<adresse>', methods=('GET', 'POST'))
def repartiteur(adresse):
try: acces = acces_ouverts[adresse]
except: abort(404)
page = acces['page']
if page == 'admin':
return page_admin()
elif page == 'expiree':
abort(410)
salon = salons[acces['salon']]
if page == 'apprenant':
return page_apprenant(salon)
elif page == 'enseignant':
return page_enseignant(salon)
if __name__ == '__main__':
app.run()