Commit 785ca6d2e7a2008124d506911b640940049cd486
1 parent
02299744
Exists in
master
and in
1 other branch
- improved many sqlalchemy queries in app.py
Showing
1 changed file
with
9 additions
and
35 deletions
Show diff stats
app.py
@@ -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 |