PageRenderTime 60ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/api/base.py

https://gitlab.com/forevercat/Project
Python | 75 lines | 63 code | 10 blank | 2 comment | 3 complexity | 2848801c8cec2a046b576e3bdddc0966 MD5 | raw file
  1. #!/usr/bin/python
  2. #encoding=utf-8
  3. import sys
  4. import json
  5. import tornado.web
  6. from tornado import httputil
  7. import sqlalchemy
  8. from sqlalchemy import create_engine
  9. from sqlalchemy.orm import sessionmaker
  10. from sqlalchemy import func
  11. from elasticsearch import Elasticsearch
  12. import api
  13. import util.config
  14. from util import json_to_str
  15. reload(sys)
  16. sys.setdefaultencoding('utf-8')
  17. class BaseHandler(tornado.web.RequestHandler):
  18. __model__ = '__base__'
  19. def __init__(self, application, request, **kwargs):
  20. super(BaseHandler, self).__init__(application, request, **kwargs)
  21. self.es = Elasticsearch()
  22. Session = sessionmaker(bind=application.engine)
  23. self.session = Session()
  24. def get(self, op = None):
  25. if not hasattr(self, op):
  26. self.write("unsupport method")
  27. return
  28. getattr(self, op)()
  29. def post(self, op = None):
  30. if not hasattr(self, op):
  31. self.write("unsupport method")
  32. return
  33. getattr(self, op)()
  34. def response(self, result = {'status':'ok'}, code = 200, reason = None):
  35. self.set_status(code, reason)
  36. if not result:
  37. self.write("")
  38. self.finish()
  39. return
  40. self.set_header("Content-Type", "application/json")
  41. self.set_header("Cache-Control", "no-cache")
  42. if result.get('code') == None:
  43. result['code'] = 0
  44. if result.get('errmsg') == None:
  45. result['errmsg'] = 'Ok'
  46. self.write(json_to_str(result))
  47. self.finish()
  48. def on_finish(self):
  49. self.session.close()
  50. def extract_arguments(self, required):
  51. arguments = {}
  52. for arg in required:
  53. v = self.get_argument(arg, "")
  54. if not v:
  55. resp = {'code': 400, 'errmsg': 'missing argument %s' % arg}
  56. self.response(resp, 400)
  57. return None
  58. arguments[arg] = v
  59. return arguments
  60. def get_client_ip(self):
  61. return self.request.headers['X-Real-Ip'] or self.request.remote_ip