Browse Source

Flask: Add update and plaintext.

INADA Naoki 12 years ago
parent
commit
5f5d55a440
3 changed files with 90 additions and 30 deletions
  1. 82 29
      flask/app.py
  2. 6 0
      flask/benchmark_config
  3. 2 1
      flask/setup_pypy.py

+ 82 - 29
flask/app.py

@@ -1,9 +1,16 @@
 #!/usr/bin/env python
 #!/usr/bin/env python
+from functools import partial
+from operator import attrgetter
+from random import randint
+import sys
+
+import flask
 from flask import Flask, jsonify, request, render_template
 from flask import Flask, jsonify, request, render_template
 from flask.ext.sqlalchemy import SQLAlchemy
 from flask.ext.sqlalchemy import SQLAlchemy
 from sqlalchemy import create_engine
 from sqlalchemy import create_engine
-from random import randint
-from operator import attrgetter
+
+if sys.version_info[0] == 3:
+    xrange = range
 
 
 try:
 try:
     import MySQLdb
     import MySQLdb
@@ -15,6 +22,7 @@ except ImportError:
 
 
 app = Flask(__name__)
 app = Flask(__name__)
 app.config['SQLALCHEMY_DATABASE_URI'] = mysql_schema + '//benchmarkdbuser:benchmarkdbpass@DBHOSTNAME:3306/hello_world?charset=utf8'
 app.config['SQLALCHEMY_DATABASE_URI'] = mysql_schema + '//benchmarkdbuser:benchmarkdbpass@DBHOSTNAME:3306/hello_world?charset=utf8'
+app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False
 db = SQLAlchemy(app)
 db = SQLAlchemy(app)
 dbraw_engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
 dbraw_engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
 
 
@@ -44,44 +52,45 @@ class Fortune(db.Model):
 
 
 @app.route("/json")
 @app.route("/json")
 def hello():
 def hello():
-  resp = {"message": "Hello, World!"}
-  return jsonify(resp)
+    return jsonify(message='Hello, World!')
+
 
 
 @app.route("/db")
 @app.route("/db")
 def get_random_world():
 def get_random_world():
-  num_queries = request.args.get("queries", 1)
-  worlds = []
-  for i in range(int(num_queries)):
-    wid = randint(1, 10000)
-    worlds.append(World.query.get(wid).serialize)
-  return jsonify(worlds=worlds)
+    num_queries = request.args.get("queries", 1, type=int)
+    worlds = [World.query.get(randint(1, 10000)).serialize
+              for _ in xrange(10000)]
+    return jsonify(worlds=worlds)
+
 
 
 @app.route("/dbs")
 @app.route("/dbs")
 def get_random_world_single():
 def get_random_world_single():
-  wid = randint(1, 10000)
-  worlds = [World.query.get(wid).serialize]
-  return jsonify(worlds=worlds)
-  
+    wid = randint(1, 10000)
+    worlds = [World.query.get(wid).serialize]
+    return jsonify(worlds=worlds)
+
+
 @app.route("/dbraw")
 @app.route("/dbraw")
 def get_random_world_raw():
 def get_random_world_raw():
-  connection = dbraw_engine.connect()
-  num_queries = request.args.get("queries", 1)
-  worlds = []
-  for i in range(int(num_queries)):
-    wid = randint(1, 10000)
-    result = connection.execute("SELECT * FROM world WHERE id = " + str(wid)).fetchone()
-    worlds.append({'id': result[0], 'randomNumber': result[1]})
-  connection.close()
-  return jsonify(worlds=worlds)
+    connection = dbraw_engine.connect()
+    num_queries = request.args.get("queries", 1, type=int)
+    worlds = []
+    for i in xrange(num_queries):
+        wid = randint(1, 10000)
+        result = connection.execute("SELECT * FROM World WHERE id = " + str(wid)).fetchone()
+        worlds.append({'id': result[0], 'randomNumber': result[1]})
+    connection.close()
+    return jsonify(worlds=worlds)
+
 
 
 @app.route("/dbsraw")
 @app.route("/dbsraw")
 def get_random_world_single_raw():
 def get_random_world_single_raw():
-  connection = dbraw_engine.connect()
-  wid = randint(1, 10000)
-  result = connection.execute("SELECT * FROM world WHERE id = " + str(wid)).fetchone()
-  worlds = [{'id': result[0], 'randomNumber': result[1]}]
-  connection.close()
-  return jsonify(worlds=worlds)
+    connection = dbraw_engine.connect()
+    wid = randint(1, 10000)
+    result = connection.execute("SELECT * FROM World WHERE id = " + str(wid)).fetchone()
+    worlds = [{'id': result[0], 'randomNumber': result[1]}]
+    connection.close()
+    return jsonify(worlds=worlds)
 
 
 @app.route("/fortunes")
 @app.route("/fortunes")
 def get_fortunes():
 def get_fortunes():
@@ -97,6 +106,50 @@ def get_forutens_raw():
     fortunes.sort(key=attrgetter('message'))
     fortunes.sort(key=attrgetter('message'))
     return render_template('fortunes.html', fortunes=fortunes)
     return render_template('fortunes.html', fortunes=fortunes)
 
 
+
[email protected]("/updates")
+def updates():
+    """Test 5: Database Updates"""
+    num_queries = request.args.get('queries', 1, type=int)
+    if num_queries > 500:
+        num_queries = 500
+
+    worlds = []
+    rp = partial(randint, 1, 10000)
+    for i in xrange(num_queries):
+        world = World.query.get(rp())
+        world.randomNumber = rp()
+        worlds.append(world.serialize)
+    db.session.commit()
+    return jsonify(worlds)
+
+
[email protected]("/raw-updates")
+def raw_updates():
+    """Test 5: Database Updates"""
+    num_queries = request.args.get('queries', 1, type=int)
+    if num_queries > 500:
+        num_queries = 500
+
+    worlds = []
+    rp = partial(randint, 1, 10000)
+    for i in xrange(num_queries):
+        world = dbraw_engine.execute("SELECT * FROM World WHERE id=%s", (rp(),)).fetchone()
+        randomNumber = rp()
+        worlds.append({'id': world['id'], 'randomNumber': randomNumber})
+        dbraw_engine.execute("UPDATE World SET randomNumber=%s WHERE id=%s",
+                             (randomNumber, world['id']))
+    return jsonify(worlds=worlds)
+
+
[email protected]('/plaintext')
+def plaintext():
+    """Test 6: Plaintext"""
+    response = flask.make_response(b'Hello, World!')
+    response.content_type = 'text/plain'
+    return response
+
+
 # entry point for debugging
 # entry point for debugging
 if __name__ == "__main__":
 if __name__ == "__main__":
     app.run(debug=True)
     app.run(debug=True)

+ 6 - 0
flask/benchmark_config

@@ -7,6 +7,8 @@
       "db_url": "/dbs",
       "db_url": "/dbs",
       "query_url": "/db?queries=",
       "query_url": "/db?queries=",
       "fortune_url": "/fortunes",
       "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
+      "plaintext_url": "/plaintext",
       "port": 8080,
       "port": 8080,
       "sort": 31
       "sort": 31
     },
     },
@@ -15,6 +17,7 @@
       "db_url": "/dbsraw",
       "db_url": "/dbsraw",
       "query_url": "/dbraw?queries=",
       "query_url": "/dbraw?queries=",
       "fortune_url": "/fortunesraw",
       "fortune_url": "/fortunesraw",
+      "update_url": "/raw-updates?queries=",
       "port": 8080,
       "port": 8080,
       "sort": 84
       "sort": 84
     },
     },
@@ -24,6 +27,8 @@
       "db_url": "/dbs",
       "db_url": "/dbs",
       "query_url": "/db?queries=",
       "query_url": "/db?queries=",
       "fortune_url": "/fortunes",
       "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
+      "plaintext_url": "/plaintext",
       "port": 8080,
       "port": 8080,
       "sort": 110
       "sort": 110
     },
     },
@@ -32,6 +37,7 @@
       "db_url": "/dbsraw",
       "db_url": "/dbsraw",
       "query_url": "/dbraw?queries=",
       "query_url": "/dbraw?queries=",
       "fortune_url": "/fortunesraw",
       "fortune_url": "/fortunesraw",
+      "update_url": "/raw-updates?queries=",
       "port": 8080,
       "port": 8080,
       "sort": 111
       "sort": 111
     }
     }

+ 2 - 1
flask/setup_pypy.py

@@ -8,7 +8,8 @@ proc = None
 def start(args):
 def start(args):
   global proc
   global proc
   setup_util.replace_text("flask/app.py", "DBHOSTNAME", args.database_host)
   setup_util.replace_text("flask/app.py", "DBHOSTNAME", args.database_host)
-  proc = subprocess.Popen("~/FrameworkBenchmarks/installs/pypy-2.0.2/bin/pypy run_pypy.py --port=8080 --logging=error", shell=True, cwd="flask")
+  proc = subprocess.Popen("~/FrameworkBenchmarks/installs/pypy-2.0.2/bin/pypy run_pypy.py --port=8080 --logging=error",
+                          shell=True, cwd="flask")
   return 0
   return 0
 
 
 def stop():
 def stop():