Commit 785ca6d2e7a2008124d506911b640940049cd486

Authored by Miguel Barão
1 parent 02299744
Exists in master and in 1 other branch dev

- improved many sqlalchemy queries in app.py

Showing 1 changed file with 9 additions and 35 deletions   Show diff stats
@@ -219,47 +219,25 @@ class App(object): @@ -219,47 +219,25 @@ class App(object):
219 return self.testfactory['questions_dir'] 219 return self.testfactory['questions_dir']
220 def get_student_grades_from_all_tests(self, uid): 220 def get_student_grades_from_all_tests(self, uid):
221 with self.db_session() as s: 221 with self.db_session() as s:
222 - # r = s.query(Test).filter_by(student_id=uid).order_by(Test.finishtime).all()  
223 - # return [(t.title, t.grade, t.finishtime) for t in r]  
224 - print('here')  
225 - return s.query(Test.title, Test.grade, Test.finishtime).filter_by(student_id=uid).order_by(Test.finishtime).all() 222 + return s.query(Test.title, Test.grade, Test.finishtime).filter_by(student_id=uid).order_by(Test.finishtime)
226 223
227 def get_json_filename_of_test(self, test_id): 224 def get_json_filename_of_test(self, test_id):
228 with self.db_session() as s: 225 with self.db_session() as s:
229 - return s.query(Test.filename).filter_by(id=test_id).one_or_none()[0]  
230 - def get_online_students(self):  
231 - # [('uid', 'name', 'starttime')]  
232 - return [(k, v['student']['name'], str(v.get('test', {}).get('start_time', '---'))) for k,v in self.online.items() if k != '0'] 226 + return s.query(Test.filename).filter_by(id=test_id).scalar()
233 227
234 - def get_offline_students(self):  
235 - # list of ('uid', 'name') sorted by uid  
236 - return [u[:2] for u in self.get_all_students() if u[0] not in self.online] 228 + def get_online_students(self): # [('uid', 'name', 'starttime')]
  229 + return [(k, v['student']['name'], str(v.get('test', {}).get('start_time', '---'))) for k,v in self.online.items() if k != '0']
237 230
238 def get_all_students(self): 231 def get_all_students(self):
239 - # list of all ('uid', 'name', 'password') sorted by uid  
240 with self.db_session() as s: 232 with self.db_session() as s:
241 - r = s.query(Student).all()  
242 - return sorted(((u.id, u.name, u.password) for u in r if u.id != '0'), key=lambda k: k[0]) 233 + return s.query(Student.id, Student.name, Student.password).filter(Student.id!='0').order_by(Student.id)
243 234
244 def get_student_grades_from_test(self, uid, testid): 235 def get_student_grades_from_test(self, uid, testid):
245 with self.db_session() as s: 236 with self.db_session() as s:
246 - r = s.query(Test).filter_by(student_id=uid).filter_by(ref=testid).all()  
247 - return [(u.grade, u.finishtime, u.id) for u in r]  
248 -  
249 - 237 + return s.query(Test.grade, Test.finishtime, Test.id).filter_by(student_id=uid).filter_by(ref=testid).all()
250 238
251 def get_students_state(self): 239 def get_students_state(self):
252 - # [{  
253 - # 'uid' : '12345'  
254 - # 'name' : 'John Smith',  
255 - # 'start_time': '',  
256 - # 'grades' : [10.2, 13.1],  
257 - # ...  
258 - # }]  
259 - l = []  
260 - for u in self.get_all_students():  
261 - uid, name, pw = u  
262 - l.append({ 240 + return [{
263 'uid': uid, 241 'uid': uid,
264 'name': name, 242 'name': name,
265 'allowed': uid in self.allowed, 243 'allowed': uid in self.allowed,
@@ -267,9 +245,8 @@ class App(object): @@ -267,9 +245,8 @@ class App(object):
267 'start_time': self.online.get(uid, {}).get('test', {}).get('start_time',''), 245 'start_time': self.online.get(uid, {}).get('test', {}).get('start_time',''),
268 'password_defined': pw != '', 246 'password_defined': pw != '',
269 'grades': self.get_student_grades_from_test(uid, self.testfactory['ref']), 247 'grades': self.get_student_grades_from_test(uid, self.testfactory['ref']),
270 - 'focus': self.online.get(uid, {}).get('student', {}).get('focus', True), # FIXME  
271 - })  
272 - return l 248 + # 'focus': self.online.get(uid, {}).get('student', {}).get('focus', True), # FIXME
  249 + } for uid, name, pw in self.get_all_students()]
273 250
274 def get_allowed_students(self): 251 def get_allowed_students(self):
275 # set of 'uid' allowed to login 252 # set of 'uid' allowed to login
@@ -307,6 +284,3 @@ class App(object): @@ -307,6 +284,3 @@ class App(object):
307 logger.error(f'Insert failed: student {uid} already exists.') 284 logger.error(f'Insert failed: student {uid} already exists.')
308 else: 285 else:
309 logger.info(f'New student inserted: {uid}, {name}') 286 logger.info(f'New student inserted: {uid}, {name}')
310 -  
311 - def set_student_focus(self, uid, value):  
312 - self.online[uid]['student']['focus'] = value