Собственно, код примерно таков :
class JsonRequestHandler(RequestHandler):
def send_answer(self, answer):
json_data = json.dumps(answer)
wrapper = self.get_argument("jsonp_wrapper", None)
if wrapper is None:
self.set_header("Content-Type", "application/json")
self.write(json_data)
else:
self.set_header("Content-Type", "application/javascript")
self.write(wrapper + "(" + json_data + ")")
self.finish()
async def get(self):
try:
answer = await self._get()
self.send_answer({"success": True, "response": answer})
except Exception as err:
self.send_answer({"success": False})
async def _get(self):
raise NotImplementedError()
class StocksHandler(JsonRequestHandler):
async def _get(self):
return await logic.stocks()
class StatsHandler(JsonRequestHandler):
async def _get(self):
filter = self.get_argument("q", "")
assert filter != ""
from_time = datetime.datetime.fromtimestamp(
int(self.get_argument("from", 0))
)
to_time = datetime.datetime.fromtimestamp(
int(self.get_argument("from", 0))
)
exclude_neutral = bool(self.get_argument("no_neutral", False))
assert to_time >= from_time
stock_id = await logic.classify_stock_tweets(filter)
return await logic.stock_stats(stock_id, from_time, to_time, exclude_neutral)
config = Configuration.from_file(config_path)
logic = AppLogic(config)
asyncio.get_event_loop().run_until_complete(logic.initialize())
AsyncIOMainLoop().install()
application = Application([
('/stocks', StocksHandler,),
('/stats', StatsHandler,)
])
application.listen(config.port)
asyncio.get_event_loop().run_forever()
Однако - реакции на запрос к 127.0.0.1:8000/stocks?jsonp_wrapper=alert - хрен. Притом - если перепилить «роутинг» :
application = Application([
('/stocks', StocksHandler,),
('/stats', StatsHandler,)
])