Browse Source

adds remaining tests to Python WebWare

Keith Newman 10 years ago
parent
commit
dfe0fb428a

+ 1 - 0
.travis.yml

@@ -126,6 +126,7 @@ env:
     - "TESTDIR=Python/django"
     - "TESTDIR=Python/django"
     - "TESTDIR=Python/falcon"
     - "TESTDIR=Python/falcon"
     - "TESTDIR=Python/flask"
     - "TESTDIR=Python/flask"
+    - "TESTDIR=Python/historical"
     - "TESTDIR=Python/pyramid"
     - "TESTDIR=Python/pyramid"
     - "TESTDIR=Python/tornado"
     - "TESTDIR=Python/tornado"
     - "TESTDIR=Python/turbogears"
     - "TESTDIR=Python/turbogears"

+ 4 - 0
frameworks/Python/historical/benchmark_config.json

@@ -5,6 +5,10 @@
       "setup_file": "webware/setup",
       "setup_file": "webware/setup",
       "json_url": "/json2",
       "json_url": "/json2",
       "plaintext_url": "/plaintext",
       "plaintext_url": "/plaintext",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
+      "fortune_url": "/fortune",
       "port": 8080,
       "port": 8080,
       "approach": "Realistic",
       "approach": "Realistic",
       "classification": "Micro",
       "classification": "Micro",

+ 2 - 2
frameworks/Python/historical/webware/app/Context/Fortune.py

@@ -2,7 +2,7 @@ from DbSession import Database
 from sqlalchemy import Column
 from sqlalchemy import Column
 from sqlalchemy.types import Integer, String
 from sqlalchemy.types import Integer, String
 
 
-class Fortune(Base):
+class Fortune(Database.Base):
     __tablename__ = "Fortune"
     __tablename__ = "Fortune"
     id = Column(Integer, primary_key=True)
     id = Column(Integer, primary_key=True)
     message = Column(String)
     message = Column(String)
@@ -11,4 +11,4 @@ class Fortune(Base):
         return {
         return {
             'id': self.id,
             'id': self.id,
             'randomNumber': self.randomNumber,
             'randomNumber': self.randomNumber,
-        }
+        }

+ 10 - 0
frameworks/Python/historical/webware/app/Context/UrlHelper.py

@@ -0,0 +1,10 @@
+def getQueryNum(queryString):
+    try:
+        num_queries = int(queryString)
+        if num_queries < 1:
+            return 1
+        if num_queries > 500:
+            return 500
+        return num_queries
+    except ValueError:
+        return 1

+ 7 - 6
frameworks/Python/historical/webware/app/Context/db.py

@@ -2,12 +2,13 @@
 from WebKit.HTTPContent import HTTPContent
 from WebKit.HTTPContent import HTTPContent
 from DbSession import Database
 from DbSession import Database
 from World import World
 from World import World
-import simplejson
+import json
 from random import randint
 from random import randint
 
 
 class db(HTTPContent):
 class db(HTTPContent):
-	def defaultAction(self):
-		self.response().setHeader("Content-Type", "application/json; charset=UTF-8")
-		wid = randint(1, 10000)
-		world = Database.DbSession.query(World).get(wid).serialize()
-   		self.write(simplejson.dumps(world))
+    def defaultAction(self):
+        self.response().clearHeaders()
+        self.response()._headers["Content-Type"] = "application/json"
+        wid = randint(1, 10000)
+        world = Database.DbSession.query(World).get(wid).serialize()
+        self.write(json.dumps(world))

+ 31 - 0
frameworks/Python/historical/webware/app/Context/fortune.py

@@ -0,0 +1,31 @@
+import json
+import bleach
+from random import randint
+from operator import attrgetter
+
+from WebKit.Page import Page
+from DbSession import Database
+from Fortune import Fortune
+
+class fortune(Page):
+    def writeDocType(self):
+        self.writeln("<!DOCTYPE html>")
+
+    def title(self):
+        return "Fortunes"
+
+    def htBodyArgs(self):
+        return ""
+
+    def writeContent(self):
+        self.response().clearHeaders()
+        self.response()._headers["Content-Type"] = "text/html; charset=UTF-8"
+        fortunes = Database.DbSession.query(Fortune).all()
+        fortunes.append(Fortune(id=0, message="Additional fortune added at request time."))
+        fortunes.sort(key=attrgetter("message"))
+		
+        self.writeln("<table><tr><th>id</th><th>message</th></tr>")
+        for fortune in fortunes:
+            message = bleach.clean(fortune.message)
+            self.writeln("<tr><td>%s</td><td>%s</td></tr>" % (fortune.id , message.encode("utf-8")))
+        self.writeln("</table>")

+ 13 - 8
frameworks/Python/historical/webware/app/Context/queries.py

@@ -1,13 +1,18 @@
+import json
+from random import randint
+from functools import partial
 
 
 from WebKit.HTTPContent import HTTPContent
 from WebKit.HTTPContent import HTTPContent
 from DbSession import Database
 from DbSession import Database
 from World import World
 from World import World
-import simplejson
-from random import randint
+import UrlHelper 
 
 
-class db(HTTPContent):
-	def defaultAction(self):
-		self.response().setHeader("Content-Type", "application/json; charset=UTF-8")
-		wid = randint(1, 10000)
-		world = Database.DbSession.query(World).get(wid).serialize()
-   		self.write(simplejson.dumps(world))
+class queries(HTTPContent):
+    def defaultAction(self):
+        self.response().clearHeaders()
+        self.response()._headers["Content-Type"] = "application/json"
+        num_queries = UrlHelper.getQueryNum(self.request().field("queries"))
+        rp = partial(randint, 1, 10000)
+        get = Database.DbSession.query(World).get
+        worlds = [get(rp()).serialize() for _ in xrange(num_queries)]
+        self.write(json.dumps(worlds))

+ 24 - 0
frameworks/Python/historical/webware/app/Context/updates.py

@@ -0,0 +1,24 @@
+import json
+from random import randint
+from functools import partial
+
+from WebKit.HTTPContent import HTTPContent
+from DbSession import Database
+from World import World
+import UrlHelper 
+
+class updates(HTTPContent):
+    def defaultAction(self):
+        self.response().clearHeaders()
+        self.response()._headers["Content-Type"] = "application/json"
+        num_queries = UrlHelper.getQueryNum(self.request().field("queries"))
+        worlds = []
+        rp = partial(randint, 1, 10000)
+        ids = [rp() for _ in xrange(num_queries)]
+        ids.sort()
+        for id in ids:
+            world = Database.DbSession.query(World).get(id)
+            world.randomNumber = rp()
+            worlds.append(world.serialize())
+        Database.DbSession.commit()
+        self.write(json.dumps(worlds))

+ 3 - 0
frameworks/Python/historical/webware/requirements.txt

@@ -0,0 +1,3 @@
+bleach==1.4.1
+mysqlclient==1.3.6
+SQLAlchemy==0.9.9