Use tornado web framework instead of webpy for backend.

parent 4113accf
......@@ -10,7 +10,7 @@ import argparse
import sys
import os
from src.backend.backend import app
from src.backend.backend import app, start_server
def init_readline():
......@@ -65,8 +65,7 @@ def main():
args = get_args()
if args.backend:
sys.argv[1] = str(args.port)
return app.run()
return start_server(app, args.port)
interactive = args.interactive and not args.batch
......
import web
import json
from tornado.web import RequestHandler, Application
from src.parser import Parser
from tests.parser import ParserWrapper
from src.validation import validate as validate_expression
urls = (
'/math\.py/validate', 'validate',
'/math\.py/hint', 'hint',
'/math\.py/step', 'Step',
'/math\.py/answer', 'Answer',
)
# Log debug information
from logging import getLogger, DEBUG
getLogger().setLevel(DEBUG)
app = web.application(urls, globals(), autoreload=True)
DEFAULT_PORT = 8888
ROUTER_DEBUG_MODE = True
def get_last_line():
data = web.input(data='').data
def get_last_line(handler):
data = handler.get_argument('data')
lines = map(str, data.split('\n'))
# Get the last none empty line.
......@@ -27,12 +25,10 @@ def get_last_line():
return last_line
class Step(object):
def POST(self):
web.header('Content-Type', 'application/json')
class Step(RequestHandler):
def post(self):
try:
last_line = get_last_line()
last_line = get_last_line(self)
if last_line:
parser = ParserWrapper(Parser)
......@@ -44,20 +40,18 @@ class Step(object):
if response:
hint, step = response
return json.dumps({'step': str(step),
'hint': str(hint)})
self.write({'step': str(step), 'hint': str(hint)})
return
return json.dumps({'hint': 'No further reduction is possible.'})
self.write({'hint': 'No further reduction is possible.'})
except Exception as e:
return json.dumps({'error': str(e)})
self.write({'error': str(e)})
class Answer(object):
def POST(self):
web.header('Content-Type', 'application/json')
class Answer(RequestHandler):
def post(self):
try:
last_line = get_last_line()
last_line = get_last_line(self)
if last_line:
parser = ParserWrapper(Parser)
......@@ -72,19 +66,18 @@ class Answer(object):
for h, s in steps:
out.append(dict(hint=str(h), step=str(s)))
return json.dumps({'steps': out})
self.write({'steps': out})
return
return json.dumps({'hint': 'No further reduction is possible.'})
self.write({'hint': 'No further reduction is possible.'})
except Exception as e:
return json.dumps({'error': str(e)})
self.write({'error': str(e)})
class hint(object):
def POST(self):
web.header('Content-Type', 'application/json')
class Hint(RequestHandler):
def post(self):
try:
last_line = get_last_line()
last_line = get_last_line(self)
if last_line:
parser = ParserWrapper(Parser)
......@@ -92,18 +85,17 @@ class hint(object):
response = parser.parser.give_hint()
if response:
return json.dumps({'hint': str(response)})
self.write({'hint': str(response)})
return
return json.dumps({'hint': 'No further reduction is possible.'})
self.write({'hint': 'No further reduction is possible.'})
except Exception as e:
return json.dumps({'error': str(e)})
self.write({'error': str(e)})
class validate(object):
def POST(self):
web.header('Content-Type', 'application/json')
data = web.input(data='').data
class Validate(RequestHandler):
def post(self):
data = self.get_argument('data')
lines = map(str, data.split('\n'))
i = 0
......@@ -134,11 +126,33 @@ class validate(object):
last_line = line
return json.dumps({'validated': i - skipped})
self.write({'validated': i - skipped})
except Exception as e:
i -= 1
return json.dumps({'error': str(e), 'validated': i - skipped})
self.write({'error': str(e), 'validated': i - skipped})
urls = [
('/math\.py/validate', Validate),
('/math\.py/hint', Hint),
('/math\.py/step', Step),
('/math\.py/answer', Answer),
]
app = Application(urls, debug=ROUTER_DEBUG_MODE)
def start_server(app, port):
from tornado.ioloop import IOLoop
from tornado.options import enable_pretty_logging
enable_pretty_logging()
app.listen(port)
IOLoop.instance().start()
if __name__ == '__main__':
import sys
if __name__ == "__main__":
app.run()
start_server(app, int(sys.argv[1]) if len(sys.argv) > 1 else DEFAULT_PORT)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment