views.py 2.4 KB

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