|
@@ -2,11 +2,19 @@
|
|
Test views, per the spec here:
|
|
Test views, per the spec here:
|
|
http://www.techempower.com/benchmarks/#section=code&hw=i7&test=json
|
|
http://www.techempower.com/benchmarks/#section=code&hw=i7&test=json
|
|
"""
|
|
"""
|
|
-
|
|
|
|
|
|
+from operator import itemgetter
|
|
from random import randint
|
|
from random import randint
|
|
|
|
+import sys
|
|
|
|
+
|
|
from pyramid.view import view_config
|
|
from pyramid.view import view_config
|
|
from pyramid.response import Response
|
|
from pyramid.response import Response
|
|
from frameworkbenchmarks.models import DBSession, World, Fortune
|
|
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')
|
|
@view_config(route_name='test_1', renderer='json')
|
|
@@ -14,7 +22,7 @@ def test_1(request):
|
|
"""
|
|
"""
|
|
Test type 1: JSON serialization
|
|
Test type 1: JSON serialization
|
|
"""
|
|
"""
|
|
- return {"message":"Hello, World!"}
|
|
|
|
|
|
+ return {"message": "Hello, World!"}
|
|
|
|
|
|
|
|
|
|
@view_config(route_name='test_2', renderer='json')
|
|
@view_config(route_name='test_2', renderer='json')
|
|
@@ -23,7 +31,8 @@ def test_2(request):
|
|
Test type 2: Single database query
|
|
Test type 2: Single database query
|
|
"""
|
|
"""
|
|
num = randint(1, 10000)
|
|
num = randint(1, 10000)
|
|
- result = DBSession.query(World).filter(World.id == num).one()
|
|
|
|
|
|
+ baked_query = bakery(lambda session: session.query(World))
|
|
|
|
+ result = baked_query(DBSession).get(num)
|
|
return result.__json__()
|
|
return result.__json__()
|
|
|
|
|
|
|
|
|
|
@@ -32,7 +41,7 @@ def test_3(request):
|
|
"""
|
|
"""
|
|
Test type 3: Multiple database queries
|
|
Test type 3: Multiple database queries
|
|
"""
|
|
"""
|
|
- queries = request.params['queries']
|
|
|
|
|
|
+ queries = request.GET.get('queries', 1)
|
|
try:
|
|
try:
|
|
queries = int(queries)
|
|
queries = int(queries)
|
|
except ValueError:
|
|
except ValueError:
|
|
@@ -42,11 +51,12 @@ def test_3(request):
|
|
queries = 1
|
|
queries = 1
|
|
elif queries > 500:
|
|
elif queries > 500:
|
|
queries = 500
|
|
queries = 500
|
|
|
|
+ baked_query = bakery(lambda session: session.query(World))
|
|
result = [
|
|
result = [
|
|
- DBSession.query(World).filter(World.id == num).one()
|
|
|
|
- for num in [randint(1, 10000) for _ in range(1, queries + 1)]
|
|
|
|
|
|
+ baked_query(DBSession).get(num).__json__()
|
|
|
|
+ for num in (randint(1, 10000) for _ in xrange(queries))
|
|
]
|
|
]
|
|
- return [obj.__json__() for obj in result]
|
|
|
|
|
|
+ return result
|
|
|
|
|
|
|
|
|
|
@view_config(route_name='test_4', renderer='templates/test_4.pt')
|
|
@view_config(route_name='test_4', renderer='templates/test_4.pt')
|
|
@@ -54,11 +64,14 @@ def test_4(request):
|
|
"""
|
|
"""
|
|
Test type 4: Fortunes
|
|
Test type 4: Fortunes
|
|
"""
|
|
"""
|
|
- fortunes = [obj.__json__() for obj in DBSession.query(Fortune).all()]
|
|
|
|
|
|
+ baked_query = bakery(lambda session: session.query(Fortune))
|
|
|
|
+
|
|
|
|
+ fortunes = [obj.__json__() for obj in baked_query(DBSession).all()]
|
|
fortunes.append(
|
|
fortunes.append(
|
|
{"id": 0, "message": "Additional fortune added at request time."}
|
|
{"id": 0, "message": "Additional fortune added at request time."}
|
|
)
|
|
)
|
|
- return {'fortunes': sorted(fortunes, key=lambda x: x['message'])}
|
|
|
|
|
|
+ fortunes.sort(key=itemgetter('message'))
|
|
|
|
+ return {'fortunes': fortunes}
|
|
|
|
|
|
|
|
|
|
@view_config(route_name='test_5', renderer='json')
|
|
@view_config(route_name='test_5', renderer='json')
|
|
@@ -66,7 +79,7 @@ def test_5(request):
|
|
"""
|
|
"""
|
|
Test type 5: Database updates
|
|
Test type 5: Database updates
|
|
"""
|
|
"""
|
|
- queries = request.params['queries']
|
|
|
|
|
|
+ queries = request.GET.get('queries', 1)
|
|
try:
|
|
try:
|
|
queries = int(queries)
|
|
queries = int(queries)
|
|
except ValueError:
|
|
except ValueError:
|
|
@@ -76,13 +89,12 @@ def test_5(request):
|
|
queries = 1
|
|
queries = 1
|
|
elif queries > 500:
|
|
elif queries > 500:
|
|
queries = 500
|
|
queries = 500
|
|
- objset = [
|
|
|
|
- DBSession.query(World).filter(World.id == num).one()
|
|
|
|
- for num in [randint(1, 10000) for _ in range(1, queries + 1)]
|
|
|
|
- ]
|
|
|
|
- for obj in objset:
|
|
|
|
|
|
+ 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)
|
|
obj.randomNumber = randint(1, 10000)
|
|
- resultset = [obj.__json__() for obj in objset]
|
|
|
|
|
|
+ resultset.append(obj.__json__())
|
|
DBSession.commit()
|
|
DBSession.commit()
|
|
return resultset
|
|
return resultset
|
|
|
|
|