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