default.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. from random import randint
  3. from functools import partial
  4. import json as jsonOut
  5. def getQueryNum(queryString):
  6. try:
  7. num_queries = int(queryString)
  8. if num_queries < 1:
  9. return 1
  10. if num_queries > 500:
  11. return 500
  12. return num_queries
  13. except ValueError:
  14. return 1
  15. def serializeWorld(world):
  16. return {
  17. "id" : world.id,
  18. "randomNumber" : world.randomNumber
  19. }
  20. def serializeFortune(fortune):
  21. return {
  22. "id" : fortune.id,
  23. "message": fortune.message
  24. }
  25. def plaintext():
  26. response.headers["Content-Type"]="text/plain; charset=UTF-8"
  27. return "Hello, World!"
  28. def json():
  29. response.headers["Content-Type"]="application/json; charset=UTF-8"
  30. return jsonOut.dumps({"message":"Hello, World!"})
  31. def db():
  32. response.headers["Content-Type"]="application/json; charset=UTF-8"
  33. wid = randint(1, 10000)
  34. world = DATABASE.world[wid]
  35. return jsonOut.dumps(serializeWorld(world))
  36. def queries():
  37. response.headers["Content-Type"]="application/json; charset=UTF-8"
  38. num_queries = getQueryNum(request.vars["queries"])
  39. rp = partial(randint, 1, 10000)
  40. worlds = [serializeWorld(DATABASE.world[rp()]) for _ in xrange(num_queries)]
  41. return jsonOut.dumps(worlds)
  42. def updates():
  43. response.headers["Content-Type"]="application/json; charset=UTF-8"
  44. num_queries = getQueryNum(request.vars["queries"])
  45. worlds = []
  46. rp = partial(randint, 1, 10000)
  47. ids = [rp() for _ in xrange(num_queries)]
  48. ids.sort() # To avoid deadlock
  49. for id in ids:
  50. world = DATABASE(DATABASE.world.id==id).select()[0]
  51. world.randomNumber = rp()
  52. worlds.append(serializeWorld(world))
  53. return jsonOut.dumps(worlds)
  54. def fortune():
  55. fortunes = DATABASE(DATABASE.fortune).select()
  56. fortune_list = fortunes.as_list();
  57. fortune_list.append({"id":0, "message":"Additional fortune added at request time."})
  58. fortune_list = sorted(fortune_list, key=lambda k: k["message"])
  59. return dict(fortunes=fortune_list)