world.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import logging
  2. import asyncio
  3. from aiohttp.web import Response
  4. from api_hour.plugins.aiohttp import JSON
  5. import aiohttp_jinja2
  6. from ..services import queries_number
  7. from ..services.world import get_random_record, get_random_records, update_random_records, get_fortunes
  8. from ..services import redis, mysql
  9. LOG = logging.getLogger(__name__)
  10. @asyncio.coroutine
  11. def json(request):
  12. """Test type 1: JSON serialization"""
  13. return JSON({'message': 'Hello, World!'})
  14. @asyncio.coroutine
  15. def db(request):
  16. """Test type 2: Single database query"""
  17. container = request.app.ah_container
  18. return JSON((yield from get_random_record(container)))
  19. @asyncio.coroutine
  20. def db_redis(request):
  21. """Test type 2: Single database query"""
  22. container = request.app.ah_container
  23. return JSON((yield from redis.get_random_record(container)))
  24. @asyncio.coroutine
  25. def db_mysql(request):
  26. """Test type 2: Single database query"""
  27. container = request.app.ah_container
  28. return JSON((yield from mysql.get_random_record(container)))
  29. @asyncio.coroutine
  30. def queries(request):
  31. """Test type 3: Multiple database queries"""
  32. container = request.app.ah_container
  33. limit = queries_number(request.GET.get('queries', 1))
  34. return JSON((yield from get_random_records(container, limit)))
  35. @asyncio.coroutine
  36. def queries_redis(request):
  37. """Test type 3: Multiple database queries"""
  38. container = request.app.ah_container
  39. limit = queries_number(request.GET.get('queries', 1))
  40. return JSON((yield from redis.get_random_records(container, limit)))
  41. @asyncio.coroutine
  42. def queries_mysql(request):
  43. """Test type 3: Multiple database queries"""
  44. container = request.app.ah_container
  45. limit = queries_number(request.GET.get('queries', 1))
  46. return JSON((yield from mysql.get_random_records(container, limit)))
  47. @asyncio.coroutine
  48. def fortunes(request):
  49. """Test type 4: Fortunes"""
  50. container = request.app.ah_container
  51. return aiohttp_jinja2.render_template('fortunes.html.j2',
  52. request,
  53. {'fortunes': (yield from get_fortunes(container))})
  54. @asyncio.coroutine
  55. def fortunes_redis(request):
  56. """Test type 4: Fortunes"""
  57. container = request.app.ah_container
  58. return aiohttp_jinja2.render_template('fortunes.html.j2',
  59. request,
  60. {'fortunes': (yield from redis.get_fortunes(container))})
  61. @asyncio.coroutine
  62. def fortunes_mysql(request):
  63. """Test type 4: Fortunes"""
  64. container = request.app.ah_container
  65. return aiohttp_jinja2.render_template('fortunes.html.j2',
  66. request,
  67. {'fortunes': (yield from mysql.get_fortunes(container))})
  68. @asyncio.coroutine
  69. def updates(request):
  70. """Test type 5: Database updates"""
  71. container = request.app.ah_container
  72. limit = queries_number(request.GET.get('queries', 1))
  73. return JSON((yield from update_random_records(container, limit)))
  74. @asyncio.coroutine
  75. def updates_redis(request):
  76. """Test type 5: Database updates"""
  77. container = request.app.ah_container
  78. limit = queries_number(request.GET.get('queries', 1))
  79. return JSON((yield from redis.update_random_records(container, limit)))
  80. @asyncio.coroutine
  81. def updates_mysql(request):
  82. """Test type 5: Database updates"""
  83. container = request.app.ah_container
  84. limit = queries_number(request.GET.get('queries', 1))
  85. return JSON((yield from mysql.update_random_records(container, limit)))
  86. @asyncio.coroutine
  87. def plaintext(request):
  88. """Test type 6: Plaintext"""
  89. return Response(text='Hello, World!')