app.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 SingleQuery(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 MultipleQueries(object):
  20. @session(serializable=False)
  21. def on_get(self, request, response, num):
  22. num = sanitize(num)
  23. worlds = [World[ident].to_dict() for ident in generate_ids(num)]
  24. response.media = worlds
  25. class UpdateQueries(object):
  26. @session(serializable=False)
  27. def on_get(self, request, response, num):
  28. num = sanitize(num)
  29. ids = generate_ids(num)
  30. ids.sort()
  31. worlds = []
  32. for item in ids:
  33. world = World[item]
  34. world.randomNumber = randint(1, 10000)
  35. worlds.append({"id": world.id, "randomNumber": world.randomNumber})
  36. response.media = worlds
  37. class Fortunes(object):
  38. _template = load_template()
  39. @session(serializable=False)
  40. def on_get(self, request, response):
  41. fortunes = [FortuneTuple(id=f.id, message=f.message) for f in Fortune.select()]
  42. fortunes.append(FortuneTuple(id=0, message="Additional fortune added at request time."))
  43. fortunes.sort(key=attrgetter("message"))
  44. content = self._template.render(fortunes=fortunes)
  45. response.content_type = falcon.MEDIA_HTML
  46. response.text = content
  47. class PlaintextResource(object):
  48. def on_get(self, request, response):
  49. response.content_type = falcon.MEDIA_TEXT
  50. response.text = 'Hello, world!'
  51. # register resources
  52. app.add_route("/json", JSONResource())
  53. app.add_route("/db", SingleQuery())
  54. app.add_route("/queries/{num}", MultipleQueries())
  55. app.add_route("/updates/{num}", UpdateQueries())
  56. app.add_route("/fortunes", Fortunes())
  57. app.add_route("/plaintext", PlaintextResource())