views.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. """
  2. Test views, per the spec here:
  3. http://www.techempower.com/benchmarks/#section=code&hw=i7&test=json
  4. """
  5. from random import randint
  6. from pyramid.view import view_config
  7. from frameworkbenchmarks.models import DBSession, World, Fortune
  8. @view_config(route_name='test_1', renderer='json')
  9. def test_1(request):
  10. """
  11. Test type 1: JSON serialization
  12. """
  13. return {"message":"Hello, World!"}
  14. @view_config(route_name='test_2', renderer='sqla_json')
  15. def test_2(request):
  16. """
  17. Test type 2: Single database query
  18. """
  19. num = randint(1, 10000)
  20. result = DBSession.query(World).filter(World.id == num).one()
  21. return result
  22. @view_config(route_name='test_3', renderer='sqla_json')
  23. def test_3(request):
  24. """
  25. Test type 3: Multiple database queries
  26. """
  27. queries = request.params['queries']
  28. try:
  29. queries = int(queries)
  30. except ValueError:
  31. queries = 1
  32. else:
  33. if queries < 1:
  34. queries = 1
  35. elif queries > 500:
  36. queries = 500
  37. result = [
  38. DBSession.query(World).filter(World.id == num).one()
  39. for num in [randint(1, 10000) for _ in range(1, queries + 1)]
  40. ]
  41. return result
  42. @view_config(route_name='test_4', renderer='templates/test_4.pt')
  43. def test_4(request):
  44. """
  45. Test type 4: Fortunes
  46. """
  47. fortunes = [obj.__json__() for obj in DBSession.query(Fortune).all()]
  48. fortunes.append(
  49. {"id": 0, "message": "Additional fortune added at request time."}
  50. )
  51. return {'fortunes': sorted(fortunes, key=lambda x: x['message'])}
  52. @view_config(route_name='test_5', renderer='json')
  53. def test_5(request):
  54. """
  55. Test type 5: Database updates
  56. """
  57. queries = request.params['queries']
  58. try:
  59. queries = int(queries)
  60. except ValueError:
  61. queries = 1
  62. else:
  63. if queries < 1:
  64. queries = 1
  65. elif queries > 500:
  66. queries = 500
  67. objset = [
  68. DBSession.query(World).filter(World.id == num).one()
  69. for num in [randint(1, 10000) for _ in range(1, queries + 1)]
  70. ]
  71. for obj in objset:
  72. obj.randomNumber = randint(1, 10000)
  73. resultset = [obj.__json__() for obj in objset]
  74. DBSession.commit()
  75. return resultset
  76. @view_config(route_name='test_6')
  77. def test_6(request):
  78. """
  79. Test type 6: Plaintext
  80. """
  81. response = request.response
  82. response.text = u"Hello, World!" # py2k/3k
  83. response.content_type = "text/plain"
  84. return response