123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- """
- Test views, per the spec here:
- http://www.techempower.com/benchmarks/#section=code&hw=i7&test=json
- """
- from operator import itemgetter
- from random import randint
- import sys
- from pyramid.view import view_config
- from pyramid.response import Response
- from frameworkbenchmarks.models import DBSession, World, Fortune
- from sqlalchemy.ext import baked
- if sys.version_info[0] == 3:
- xrange = range
- bakery = baked.bakery()
- @view_config(route_name='test_1', renderer='json')
- def test_1(request):
- """
- Test type 1: JSON serialization
- """
- return {"message": "Hello, World!"}
- @view_config(route_name='test_2', renderer='json')
- def test_2(request):
- """
- Test type 2: Single database query
- """
- num = randint(1, 10000)
- baked_query = bakery(lambda session: session.query(World))
- result = baked_query(DBSession).get(num)
- return result.__json__()
- @view_config(route_name='test_3', renderer='json')
- def test_3(request):
- """
- Test type 3: Multiple database queries
- """
- queries = request.GET.get('queries', 1)
- try:
- queries = int(queries)
- except ValueError:
- queries = 1
- else:
- if queries < 1:
- queries = 1
- elif queries > 500:
- queries = 500
- baked_query = bakery(lambda session: session.query(World))
- result = [
- baked_query(DBSession).get(num).__json__()
- for num in (randint(1, 10000) for _ in xrange(queries))
- ]
- return result
- @view_config(route_name='test_4', renderer='templates/test_4.pt')
- def test_4(request):
- """
- Test type 4: Fortunes
- """
- baked_query = bakery(lambda session: session.query(Fortune))
- fortunes = [obj.__json__() for obj in baked_query(DBSession).all()]
- fortunes.append(
- {"id": 0, "message": "Additional fortune added at request time."}
- )
- fortunes.sort(key=itemgetter('message'))
- return {'fortunes': fortunes}
- @view_config(route_name='test_5', renderer='json')
- def test_5(request):
- """
- Test type 5: Database updates
- """
- queries = request.GET.get('queries', 1)
- try:
- queries = int(queries)
- except ValueError:
- queries = 1
- else:
- if queries < 1:
- queries = 1
- elif queries > 500:
- queries = 500
- baked_query = bakery(lambda session: session.query(World))
- resultset = []
- for num in sorted(randint(1, 10000) for _ in xrange(queries)):
- obj = baked_query(DBSession).get(num)
- obj.randomNumber = randint(1, 10000)
- resultset.append(obj.__json__())
- DBSession.commit()
- return resultset
- @view_config(route_name='test_6')
- def test_6(request):
- """
- Test type 6: Plaintext
- """
- response = Response(
- body=b'Hello, World!',
- content_type='text/plain',
- )
- return response
|