server.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/usr/bin/env python
  2. import sys
  3. import json
  4. from random import randint
  5. import motor
  6. import tornado.ioloop
  7. import tornado.web
  8. from tornado import gen
  9. import tornado.options
  10. from tornado.options import options
  11. import tornado.httpserver
  12. PY3 = False
  13. if sys.version_info[0] == 3:
  14. PY3 = True
  15. xrange = range
  16. tornado.options.define('port', default=8888, type=int, help="Server port")
  17. tornado.options.define('mongo', default='localhost', type=str, help="MongoDB host")
  18. class BaseHandler(tornado.web.RequestHandler):
  19. def compute_etag(self):
  20. return None
  21. class JsonSerializeTestHandler(BaseHandler):
  22. def get(self):
  23. obj = {"message": "Hello, World!", }
  24. self.write(obj)
  25. class PlaintextHandler(BaseHandler):
  26. def get(self):
  27. self.set_header('Content-Type', 'text/plain')
  28. self.write(b"Hello, World!")
  29. class DBTestHandler(BaseHandler):
  30. @gen.coroutine
  31. def get(self):
  32. world = yield motor.Op(db.World.find_one, randint(1, 10000))
  33. # Get first postion on arguments, and so first postion in mongo return
  34. world['id'] = str(world.pop('_id'))
  35. response = json.dumps(world)
  36. self.set_header("Content-Type", "application/json; charset=UTF-8")
  37. self.write(response)
  38. class QueryTestHandler(BaseHandler):
  39. @gen.coroutine
  40. def get(self):
  41. try:
  42. queries = int(self.get_argument("queries"))
  43. except Exception:
  44. queries = 1
  45. else:
  46. if queries < 1:
  47. queries = 1
  48. elif queries > 500:
  49. queries = 500
  50. worlds = yield [motor.Op(db.World.find_one, randint(1, 10000))
  51. for _ in xrange(queries)]
  52. for world in worlds:
  53. # Get first postion on arguments, and so first postion in mongo return
  54. world['id'] = str(world.pop('_id'))
  55. response = json.dumps(worlds)
  56. self.set_header("Content-Type", "application/json; charset=UTF-8")
  57. self.write(response)
  58. application = tornado.web.Application([
  59. (r"/json", JsonSerializeTestHandler),
  60. (r"/plaintext", PlaintextHandler),
  61. (r"/db", DBTestHandler),
  62. (r"/queries", QueryTestHandler),
  63. ])
  64. if __name__ == "__main__":
  65. tornado.options.parse_command_line()
  66. server = tornado.httpserver.HTTPServer(application)
  67. server.bind(options.port)
  68. server.start(0)
  69. db = motor.MotorClient(options.mongo).open_sync().hello_world
  70. tornado.ioloop.IOLoop.instance().start()