Răsfoiți Sursa

Merge branch 'master' into remove-install-scripts

msmith-techempower 10 ani în urmă
părinte
comite
57cb9c6155

+ 59 - 47
frameworks/Python/klein/app.py

@@ -1,23 +1,19 @@
 # -*- coding: utf-8 -*-
 
-import os
-import sys
+from functools import partial, wraps
 import json
-
-import bleach
-
-from random import randint
-from functools import partial
 from operator import attrgetter
-
-from klein import Klein, run, route
+import os
+from random import randint
+import sys
 
 from jinja2 import Environment, PackageLoader
-
-from sqlalchemy.ext.declarative import declarative_base
+from klein import Klein, run, route
 from sqlalchemy import create_engine, Column
-from sqlalchemy.types import String, Integer, Unicode
+from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.orm import sessionmaker
+from sqlalchemy.types import String, Integer, Unicode
+
 
 if sys.version_info[0] == 3:
     xrange = range
@@ -29,10 +25,11 @@ db_engine = create_engine(DATABASE_URI)
 Session = sessionmaker(bind=db_engine)
 db_session = Session()
 
-env = Environment(loader=PackageLoader("app", "templates"))
+env = Environment(loader=PackageLoader("app", "templates"), autoescape=True, auto_reload=False)
 
 app = Klein()
 
+
 class Fortune(Base):
     __tablename__ = "Fortune"
     id = Column(Integer, primary_key=True)
@@ -65,57 +62,72 @@ def getQueryNum(queryString):
     except ValueError:
          return 1
 
+
+def close_session(func):
+    @wraps(func)
+    def wrapper(request):
+        try:
+            return func(request)
+        finally:
+            db_session.close()
+    return wrapper
+
+
 @app.route("/plaintext")
 def plaintext(request):
-	request.setHeader("Content-Type", "text/plain; charset=UTF-8")
-	return "Hello, World!"
+    request.setHeader("Content-Type", "text/plain; charset=UTF-8")
+    return "Hello, World!"
 
 @app.route("/json")
 def jsonHandler(request):
-	request.setHeader("Content-Type", "application/json; charset=UTF-8")
-	return json.dumps({"message": "Hello, World!"})
+    request.setHeader("Content-Type", "application/json; charset=UTF-8")
+    return json.dumps({"message": "Hello, World!"})
 
 @app.route("/db")
+@close_session
 def db(request):
-	request.setHeader("Content-Type", "application/json; charset=UTF-8")	
-	wid = randint(1, 10000)
-	world = db_session.query(World).get(wid).serialize() 
-	return json.dumps(world)
+    request.setHeader("Content-Type", "application/json; charset=UTF-8")
+    wid = randint(1, 10000)
+    world = db_session.query(World).get(wid).serialize()
+    return json.dumps(world)
 
 @app.route("/queries")
+@close_session
 def queries(request):
-	request.setHeader("Content-Type", "application/json; charset=UTF-8")	
-	num_queries = getQueryNum(request.args.get("queries")[0])
-	rp = partial(randint, 1, 10000)
-	get = db_session.query(World).get
-	worlds = [get(rp()).serialize() for _ in xrange(num_queries)]
-	return json.dumps(worlds)
+    request.setHeader("Content-Type", "application/json; charset=UTF-8")
+    num_queries = getQueryNum(request.args.get("queries")[0])
+    rp = partial(randint, 1, 10000)
+    get = db_session.query(World).get
+    worlds = [get(rp()).serialize() for _ in xrange(num_queries)]
+    return json.dumps(worlds)
 
 @app.route("/updates")
+@close_session
 def updates(request):
-	request.setHeader("Content-Type", "application/json; charset=UTF-8")
-	num_queries = getQueryNum(request.args.get("queries")[0])
-	worlds = []
-	rp = partial(randint, 1, 10000)
-	ids = [rp() for _ in xrange(num_queries)]
-	ids.sort()
-	for id in ids:
-		world = db_session.query(World).get(id)
-		world.randomNumber = rp()
-		worlds.append(world.serialize())
-	db_session.commit()
-	return json.dumps(worlds)
+    request.setHeader("Content-Type", "application/json; charset=UTF-8")
+    num_queries = getQueryNum(request.args.get("queries")[0])
+    worlds = []
+    rp = partial(randint, 1, 10000)
+    ids = [rp() for _ in xrange(num_queries)]
+    ids.sort()
+    for id in ids:
+        world = db_session.query(World).get(id)
+        world.randomNumber = rp()
+        worlds.append(world.serialize())
+    db_session.commit()
+    return json.dumps(worlds)
 
 @app.route("/fortune")
+@close_session
 def fortune(request):
-	request.setHeader("Content-Type", "text/html; charset=UTF-8")
-	fortunes = db_session.query(Fortune).all()
-	fortunes.append(Fortune(id=0, message="Additional fortune added at request time."))
-	fortunes.sort(key=attrgetter("message"))
-	for f in fortunes:
-		f.message = bleach.clean(f.message)
-	template = env.get_template("fortunes.html")
-	return template.render(fortunes=fortunes)
+    request.setHeader("Content-Type", "text/html; charset=UTF-8")
+    fortunes = db_session.query(Fortune).all()
+    fortunes.append(Fortune(id=0, message="Additional fortune added at request time."))
+    fortunes.sort(key=attrgetter("message"))
+    template = env.get_template("fortunes.html")
+    return template.render(fortunes=fortunes)
 
 if __name__ == "__main__":
     app.run("0.0.0.0", 8080)
+
+# vim: set expandtab sw=4 sts=4 ts=4 :

+ 0 - 1
frameworks/Python/klein/requirements.txt

@@ -1,6 +1,5 @@
 klein==15.0.0
 
-bleach==1.4.1
 mysqlclient==1.3.6
 SQLAlchemy==1.0.4
 jinja2==2.7.3

+ 14 - 14
frameworks/Python/turbogears/app.py

@@ -1,22 +1,19 @@
-import os
-import sys
-import json
 from functools import partial
 from operator import attrgetter
+import os
 from random import randint
-
-import bleach
-
-from tg import expose, TGController, AppConfig
+import sys
+import json
 
 from jinja2 import Environment, PackageLoader
-
-from sqlalchemy.orm import scoped_session, sessionmaker
 from sqlalchemy import create_engine
+from sqlalchemy.orm import scoped_session, sessionmaker
+from tg import expose, TGController, AppConfig
 
 from models.Fortune import Fortune
 from models.World import World
 
+
 DBDRIVER = 'mysql'
 DBHOSTNAME = os.environ.get('DBHOST', 'localhost')
 DATABASE_URI = '%s://benchmarkdbuser:benchmarkdbpass@%s:3306/hello_world?charset=utf8' % (DBDRIVER, DBHOSTNAME)
@@ -25,7 +22,7 @@ db_engine = create_engine(DATABASE_URI)
 Session = sessionmaker(bind=db_engine)
 db_session = Session()
 
-env = Environment(loader=PackageLoader("app", "templates"))
+env = Environment(loader=PackageLoader("app", "templates"), autoescape=True, auto_reload=False)
 
 def getQueryNum(queryString):
     try:
@@ -76,19 +73,22 @@ class RootController(TGController):
         worlds = [get(rp()).serialize() for _ in xrange(num_queries)]
         return json.dumps(worlds)
 
-
     @expose()
     def fortune(self):
         fortunes = db_session.query(Fortune).all()
         fortunes.append(Fortune(id=0, message="Additional fortune added at request time."))
         fortunes.sort(key=attrgetter("message"))
-        for f in fortunes:
-            f.message = bleach.clean(f.message)
         template = env.get_template("fortunes.html")
         return template.render(fortunes=fortunes)
 
 config = AppConfig(minimal=True, root_controller=RootController())
 config.renderers.append("jinja")
 
-app = config.make_wsgi_app()
+tg_app = config.make_wsgi_app()
 
+
+def app(env, start):
+    try:
+        return tg_app(env, start)
+    finally:
+        db_session.close()

+ 0 - 2
frameworks/Python/turbogears/requirements.txt

@@ -1,7 +1,5 @@
 tg.devtools==2.3.5
 
-bleach==1.4.1
-
 SQLAlchemy==1.0.4
 zope.sqlalchemy==0.7.6
 mysqlclient==1.3.6