Source code for uw.web.wsgi.sql

"""Support for RDBMS sessions.

This module allows wrapping an application handler so that an SQL connection
is automatically opened before handling the request, and committed afterward.
"""

from uw.web.wsgi.parameter import get_params, set_param, ParamHandler

[docs]def sql_db (handler, db): return ParamHandler (handler, 'db', lambda environ: db)
def sql_transaction (handler): def result (environ, start_response): db = get_params (environ)['db'] connection = db.engine.connect () set_param (environ, 'connection', connection) transaction = connection.begin () try: result = handler (environ, start_response) transaction.commit () return result except: transaction.rollback () raise return result # To go with SQLAlchemy
[docs]def sql_transaction (handler): def result (environ, start_response): db = get_params (environ)['db'] session = db.make_session () set_param (environ, 'session', session) try: result = handler (environ, start_response) session.commit () return result except: session.rollback () raise return result
# To go with simple psycopg2-wrapping stuff # What about .set_isolation_level for autocommit (e.g., create database)? # This code assumes one transaction per web request.
[docs]def sql_pool_transaction (handler, connection_pool): def result (environ, start_response): connection = connection_pool.connect () cursor = connection.cursor () set_param (environ, 'cursor', cursor) result = handler (environ, start_response) connection.commit () connection_pool.put (connection) return result return result