Browse Source

API-Hour FrameworkBenchmark: Add test 5

Ludovic Gasc (GMLudo) 10 years ago
parent
commit
8e77d9de74

+ 2 - 0
frameworks/Python/API-Hour/benchmark_config

@@ -6,6 +6,8 @@
       "json_url": "/json",
       "db_url": "/db",
       "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
+      "plaintext_url": "/plaintext",
       "port": 8008,
       "approach": "Realistic",
       "classification": "Micro",

+ 2 - 0
frameworks/Python/API-Hour/hello/hello/__init__.py

@@ -24,6 +24,8 @@ class Container(api_hour.Container):
         self.servers['http'].router.add_route('GET', '/json', endpoints.world.json)
         self.servers['http'].router.add_route('GET', '/db', endpoints.world.db)
         self.servers['http'].router.add_route('GET', '/queries', endpoints.world.queries)
+        self.servers['http'].router.add_route('GET', '/updates', endpoints.world.updates)
+        self.servers['http'].router.add_route('GET', '/plaintext', endpoints.world.plaintext)
 
     def make_servers(self):
         return [self.servers['http'].make_handler()]

+ 17 - 2
frameworks/Python/API-Hour/hello/hello/endpoints/world.py

@@ -1,9 +1,11 @@
 import logging
 import asyncio
 
+from aiohttp.web import Response
+
 from ..utils import JSON
 from ..services import queries_number
-from ..services.world import get_random_record, get_random_records
+from ..services.world import get_random_record, get_random_records, update_random_records
 
 LOG = logging.getLogger(__name__)
 
@@ -25,4 +27,17 @@ def queries(request):
     container = request.app.ah_container
     limit = queries_number(request.GET.get('queries', 1))
 
-    return JSON((yield from get_random_records(container, limit)))
+    return JSON((yield from get_random_records(container, limit)))
+
[email protected]
+def updates(request):
+    """Test type 5: Database updates"""
+    container = request.app.ah_container
+    limit = queries_number(request.GET.get('queries', 1))
+
+    return JSON((yield from update_random_records(container, limit)))
+
[email protected]
+def plaintext(request):
+    """Test type 6: Plaintext"""
+    return Response(text='Hello, World!')

+ 22 - 0
frameworks/Python/API-Hour/hello/hello/services/world.py

@@ -19,6 +19,28 @@ def get_random_records(container, limit):
     for i in range(limit):
         tasks.append(container.loop.create_task(get_random_record(container)))
     yield from asyncio.wait(tasks)
+    for task in tasks:
+        results.append(task.result())
+    return results
+
[email protected]
+def update_random_record(container):
+    pg = yield from container.engines['pg']
+
+    world = yield from get_random_record(container)
+
+    with (yield from pg.cursor()) as cur:
+        yield from cur.execute('UPDATE world SET randomnumber=%(random_number)s WHERE id=%(idx)s',
+                               {'random_number': randint(1, 10000), 'idx': world['Id']})
+    return world
+
[email protected]
+def update_random_records(container, limit):
+    tasks = []
+    results = []
+    for i in range(limit):
+        tasks.append(container.loop.create_task(update_random_record(container)))
+    yield from asyncio.wait(tasks)
     for task in tasks:
         results.append(task.result())
     return results