import json import tornado.gen import tornado.web from web import asyncTornado from constants import argumentTypes from objects import glob ARGS = { ("file_hash", "file_version", "timestamp"): argumentTypes.one_required } SQL_STRUCT = { "main": "SELECT search.*, max(search.file_version) FROM updates search %s GROUP BY filename;", "file_hash": "WHERE %s <= %s", "file_version": "WHERE %s <= %s", "timestamp": "INNER JOIN ( SELECT file_version, file_version FROM updates WHERE %s = '%s' ) find ON search.file_version <= find.file_version" } class handler(asyncTornado.asyncRequestHandler): @tornado.web.asynchronous @tornado.gen.engine def asyncGet(self): status_code = 400 data = {} try: args_filter = asyncTornado.check_arguments(self.request.arguments, ARGS) if not args_filter: raise Exception("Missing required arguments") method = args_filter[0] method_value = self.get_argument(method) conn = glob.new_sql() cur = conn.cursor() sql = SQL_STRUCT["main"] % SQL_STRUCT[method] cur.execute(sql % (method, method_value)) data = cur.fetchall() cur.close() conn.close() status_code = 200 except Exception as e: status_code = 400 data["status"] = status_code data["message"] = str(e) print("Err: %s" % e) finally: self.write( json.dumps(data) ) self.set_header("Content-Type", "application/json") self.set_status(status_code)