123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- from operator import attrgetter, itemgetter
- from random import randint
- from aiohttp_jinja2 import template
- from aiohttp.web import Response
- import ujson
- from sqlalchemy import select
- from .models import sa_fortunes, sa_worlds, Fortune
- def json_response(data):
- body = ujson.dumps(data)
- return Response(body=body.encode(), content_type='application/json')
- def get_num_queries(request):
- try:
- num_queries = int(request.GET.get('queries', 1))
- except ValueError:
- return 1
- if num_queries < 1:
- return 1
- if num_queries > 500:
- return 500
- return num_queries
- async def json(request):
- """
- Test 1
- """
- return json_response({'message': 'Hello, World!'})
- async def single_database_query_orm(request):
- """
- Test 2 ORM
- """
- id_ = randint(1, 10000)
- async with request.app['aiopg_engine'].acquire() as conn:
- cur = await conn.execute(select([sa_worlds.c.randomnumber]).where(sa_worlds.c.id == id_))
- r = await cur.first()
- return json_response({'id': id_, 'randomNumber': r[0]})
- async def single_database_query_raw(request):
- """
- Test 2 RAW
- """
- id_ = randint(1, 10000)
- async with request.app['asyncpg_pool'].acquire() as conn:
- r = await conn.fetchval('SELECT randomnumber FROM world WHERE id = $1', id_)
- return json_response({'id': id_, 'randomNumber': r})
- async def multiple_database_queries_orm(request):
- """
- Test 3 ORM
- """
- num_queries = get_num_queries(request)
- ids = [randint(1, 10000) for _ in range(num_queries)]
- ids.sort()
- result = []
- async with request.app['aiopg_engine'].acquire() as conn:
- for id_ in ids:
- cur = await conn.execute(select([sa_worlds.c.randomnumber]).where(sa_worlds.c.id == id_))
- r = await cur.first()
- result.append({'id': id_, 'randomNumber': r[0]})
- return json_response(result)
- async def multiple_database_queries_raw(request):
- """
- Test 3 RAW
- """
- num_queries = get_num_queries(request)
- ids = [randint(1, 10000) for _ in range(num_queries)]
- ids.sort()
- result = []
- async with request.app['asyncpg_pool'].acquire() as conn:
- stmt = await conn.prepare('SELECT randomnumber FROM world WHERE id = $1')
- for id_ in ids:
- result.append({
- 'id': id_,
- 'randomNumber': await stmt.fetchval(id_),
- })
- return json_response(result)
- @template('fortune.jinja')
- async def fortunes(request):
- """
- Test 4 ORM
- """
- async with request.app['aiopg_engine'].acquire() as conn:
- cur = await conn.execute(select([sa_fortunes.c.id, sa_fortunes.c.message]))
- fortunes = list(await cur.fetchall())
- fortunes.append(Fortune(id=0, message='Additional fortune added at request time.'))
- fortunes.sort(key=attrgetter('message'))
- return {'fortunes': fortunes}
- @template('fortune.jinja')
- async def fortunes_raw(request):
- """
- Test 4 RAW
- """
- async with request.app['asyncpg_pool'].acquire() as conn:
- fortunes = await conn.fetch('SELECT * FROM Fortune')
- fortunes.append(dict(id=0, message='Additional fortune added at request time.'))
- fortunes.sort(key=itemgetter('message'))
- return {'fortunes': fortunes}
- async def updates(request):
- """
- Test 5 ORM
- """
- num_queries = get_num_queries(request)
- result = []
- ids = [randint(1, 10000) for _ in range(num_queries)]
- ids.sort()
- async with request.app['aiopg_engine'].acquire() as conn:
- for id_ in ids:
- cur = await conn.execute(
- select([sa_worlds.c.randomnumber])
- .where(sa_worlds.c.id == id_)
- )
- r = await cur.first()
- await conn.execute(
- sa_worlds.update()
- .where(sa_worlds.c.id == id_)
- .values(randomnumber=randint(1, 10000))
- )
- result.append({'id': id_, 'randomNumber': r.randomnumber})
- return json_response(result)
- async def updates_raw(request):
- """
- Test 5 RAW
- """
- num_queries = get_num_queries(request)
- ids = [randint(1, 10000) for _ in range(num_queries)]
- ids.sort()
- result = []
- updates = []
- async with request.app['asyncpg_pool'].acquire() as conn:
- stmt = await conn.prepare('SELECT randomnumber FROM world WHERE id = $1')
- for id_ in ids:
- result.append({
- 'id': id_,
- 'randomNumber': await stmt.fetchval(id_)
- })
- updates.append((randint(1, 10000), id_))
- await conn.executemany('UPDATE world SET randomnumber=$1 WHERE id=$2', updates)
- return json_response(result)
- async def plaintext(request):
- """
- Test 6
- """
- return Response(body=b'Hello, World!', content_type='text/plain')
|