Commit d4fa55fc2eb09dffa1498a46c2897bd7c6f6915d

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

login and correction are now async

Showing 1 changed file with 17 additions and 12 deletions   Show diff stats
serve.py
1 1 #!/usr/bin/env python3
2 2  
3   -# base
  3 +# python standard library
4 4 from os import path
5 5 import sys
6   -import argparse
7   -import logging.config
8   -import json
9 6 import base64
10 7 import uuid
  8 +import logging.config
  9 +import argparse
11 10 import mimetypes
12 11 import signal
  12 +import asyncio
  13 +import json
13 14  
14   -# packages
  15 +# user installed libraries
15 16 import tornado.ioloop
16 17 import tornado.web
17 18 import tornado.httpserver
18 19 from tornado import template, gen
19 20  
20   -# project
21   -from tools import load_yaml, md_to_html
  21 +# this project
22 22 from app import App, AppException
  23 +from tools import load_yaml, md_to_html
23 24  
24 25  
25 26 class WebApplication(tornado.web.Application):
... ... @@ -69,14 +70,16 @@ class LoginHandler(BaseHandler):
69 70 def get(self):
70 71 self.render('login.html', error='')
71 72  
72   - # @gen.coroutine
73   - def post(self):
  73 + async def post(self):
74 74 uid = self.get_body_argument('uid')
75 75 if uid.startswith('l'): # remove prefix 'l'
76 76 uid = uid[1:]
77 77 pw = self.get_body_argument('pw')
78 78  
79   - if self.testapp.login(uid, pw):
  79 + loop = asyncio.get_event_loop()
  80 + login_ok = await loop.run_in_executor(None, self.testapp.login, uid, pw)
  81 +
  82 + if login_ok:
80 83 self.set_secure_cookie("user", str(uid), expires_days=30)
81 84 self.redirect(self.get_argument("next", "/"))
82 85 else:
... ... @@ -206,7 +209,7 @@ class TestHandler(BaseHandler):
206 209  
207 210 # POST
208 211 @tornado.web.authenticated
209   - def post(self):
  212 + async def post(self):
210 213 uid = self.current_user
211 214  
212 215 # self.request.arguments = {'answered-0': [b'on'], '0': [b'13.45']}
... ... @@ -229,7 +232,9 @@ class TestHandler(BaseHandler):
229 232 'numeric-interval'):
230 233 ans[i] = ans[i][0]
231 234  
232   - self.testapp.correct_test(uid, ans)
  235 + loop = asyncio.get_event_loop()
  236 + await loop.run_in_executor(None, self.testapp.correct_test, uid, ans)
  237 +
233 238 self.testapp.logout(uid)
234 239 self.clear_cookie('user')
235 240  
... ...