api.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import datetime
  2. import json
  3. import tornado.web
  4. from config import web as config
  5. import db.queries
  6. class JSONDateEncoder(json.JSONEncoder):
  7. def default(self, data):
  8. if isinstance(data, datetime.datetime):
  9. return str(data)
  10. return super(JSONDateEncoder, self).default(data)
  11. class APIHandler(tornado.web.RequestHandler):
  12. def set_default_headers(self):
  13. self.set_header('Access-Control-Allow-Origin', '*')
  14. self.set_header('Access-Control-Allow-Headers', 'X-Requested-With, X-Request')
  15. def compute_etag(self):
  16. return None
  17. def respond_json(self, data):
  18. self.set_header('Content-Type', 'application/json; charset=UTF-8')
  19. for chunk in JSONDateEncoder(indent='\t').iterencode(data):
  20. self.write(chunk)
  21. self.finish()
  22. def options(self, *args):
  23. return
  24. class SearchHandler(APIHandler):
  25. def get(self):
  26. q = self.get_argument('q')
  27. data = db.queries.search(q)
  28. self.respond_json(data)
  29. class CorporationHandler(APIHandler):
  30. def get(self, corp_id):
  31. kills = db.queries.corporation(corp_id)
  32. self.respond_json(kills)
  33. class KillHandler(APIHandler):
  34. def get(self, kill_id):
  35. kill = db.queries.kill(kill_id)
  36. self.respond_json(kill)
  37. def start():
  38. tornado.web.Application(
  39. handlers=[
  40. (r'/search', SearchHandler),
  41. (r'/corporation/(.+)', CorporationHandler),
  42. (r'/kill/(.+)', KillHandler),
  43. ],
  44. debug=config.debug,
  45. ).listen(config.api_port)
  46. print('listening on :%d' % config.api_port)