default.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. session.forget()
  27. response.headers["Content-Type"]="text/plain; charset=UTF-8"
  28. return "Hello, World!"
  29. def json():
  30. session.forget()
  31. response.headers["Content-Type"]="application/json; charset=UTF-8"
  32. return jsonOut.dumps({"message":"Hello, World!"})
  33. def db():
  34. session.forget()
  35. response.headers["Content-Type"]="application/json; charset=UTF-8"
  36. wid = randint(1, 10000)
  37. world = DATABASE.world[wid]
  38. return jsonOut.dumps(serializeWorld(world))
  39. def queries():
  40. session.forget()
  41. response.headers["Content-Type"]="application/json; charset=UTF-8"
  42. num_queries = getQueryNum(request.vars["queries"])
  43. rp = partial(randint, 1, 10000)
  44. worlds = [serializeWorld(DATABASE.world[rp()]) for _ in xrange(num_queries)]
  45. return jsonOut.dumps(worlds)
  46. def updates():
  47. session.forget()
  48. response.headers["Content-Type"]="application/json; charset=UTF-8"
  49. num_queries = getQueryNum(request.vars["queries"])
  50. worlds = []
  51. rp = partial(randint, 1, 10000)
  52. ids = [rp() for _ in xrange(num_queries)]
  53. ids.sort() # To avoid deadlock
  54. for id in ids:
  55. world = DATABASE.world[id]
  56. newNumber = rp()
  57. DATABASE(DATABASE.world.id==id).update(randomNumber=newNumber)
  58. world.randomNumber = newNumber
  59. worlds.append(serializeWorld(world))
  60. return jsonOut.dumps(worlds)
  61. def fortune():
  62. session.forget()
  63. fortunes = DATABASE(DATABASE.fortune).select()
  64. fortune_list = fortunes.as_list();
  65. fortune_list.append({"id":0, "message":"Additional fortune added at request time."})
  66. fortune_list = sorted(fortune_list, key=lambda k: k["message"])
  67. return dict(fortunes=fortune_list)