app.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/usr/bin/env python
  2. import falcon
  3. from db_orm import session, World, Fortune
  4. from helpers import load_template, FortuneTuple, generate_ids, sanitize
  5. from operator import attrgetter
  6. from random import randint
  7. # setup
  8. wsgi = app = falcon.App()
  9. # resource endpoints
  10. class JSONResource(object):
  11. def on_get(self, request, response):
  12. response.media = {'message': "Hello, world!"}
  13. class RandomWorld(object):
  14. @session(serializable=False)
  15. def on_get(self, request, response):
  16. wid = randint(1, 10000)
  17. world = World[wid]
  18. response.media = world.to_dict()
  19. class RandomQueries(object):
  20. @session(serializable=False)
  21. def on_get(self, request, response, **params):
  22. num = params.get("num", "1")
  23. num = sanitize(num)
  24. worlds = [World[ident].to_dict() for ident in generate_ids(num)]
  25. response.media = worlds
  26. class UpdateQueries(object):
  27. @session(serializable=False)
  28. def on_get(self, request, response, **params):
  29. num = params.get("num", "1")
  30. num = sanitize(num)
  31. ids = generate_ids(num)
  32. ids.sort()
  33. worlds = []
  34. for item in ids:
  35. world = World[item]
  36. world.randomNumber = randint(1, 10000)
  37. worlds.append({"id": world.id, "randomNumber": world.randomNumber})
  38. response.media = worlds
  39. class Fortunes(object):
  40. _template = load_template()
  41. @session(serializable=False)
  42. def on_get(self, request, response):
  43. fortunes = [FortuneTuple(id=f.id, message=f.message) for f in Fortune.select()]
  44. fortunes.append(FortuneTuple(id=0, message="Additional fortune added at request time."))
  45. fortunes.sort(key=attrgetter("message"))
  46. content = self._template.render(fortunes=fortunes)
  47. response.content_type = falcon.MEDIA_HTML
  48. response.text = content
  49. class PlaintextResource(object):
  50. def on_get(self, request, response):
  51. response.content_type = falcon.MEDIA_TEXT
  52. response.text = 'Hello, world!'
  53. # register resources
  54. app.add_route("/json", JSONResource())
  55. app.add_route("/db", RandomWorld())
  56. app.add_route("/queries/{num}", RandomQueries())
  57. app.add_route("/updates/{num}", UpdateQueries())
  58. app.add_route("/fortunes", Fortunes())
  59. app.add_route("/plaintext", PlaintextResource())