Source code for gDBPool.pool_connection
# -*- coding: utf-8 -*-
# Copyright 2011-2012 Florian von Bock (f at vonbock dot info)
#
# gDBPool - db connection pooling for gevent
__author__ = "Florian von Bock"
__email__ = "f at vonbock dot info"
__version__ = "0.1.2"
import gevent
from gevent import monkey; monkey.patch_all()
import psycopg2
import sys, traceback
from psyco_ge import make_psycopg_green; make_psycopg_green()
assert 'gDBPool.psyco_ge' in sys.modules.keys()
from psycopg2.extras import RealDictCursor
from time import time
from gDBPoolError import PoolConnectionException
[docs]class PoolConnection( object ):
"""
Single connection object for the pool
On object initialization the object initializes the DB connection
(a standard Db-API connection object).
Direct access to the object is only possible when the member name
is prefixed with "PoolConnection\_". Otherwise member access goes
to the 'inner' connection object.
"""
def __init__( self, db_module, dsn, cursor_type = None ):
self.db_module_name = db_module
self.cursor_type = cursor_type
self.db_module = sys.modules[ db_module ]
try:
self.conn = self.PoolConnection_db_module.connect( dsn )
self.initialized_at = time()
except Exception, e:
raise PoolConnectionException( "PoolConnection failed: Could not connect to database: %s" % e )
def __getattribute__( self, name ):
if name.startswith( 'PoolConnection_' ) or name == 'cursor':
if name == 'cursor':
return object.__getattribute__( self, name )
else:
return object.__getattribute__( self, name[15:] )
else:
return object.__getattribute__( self.PoolConnection_conn, name )
def cursor( self, *args, **kwargs ):
if self.PoolConnection_db_module_name == 'psycopg2':
kwargs[ 'cursor_factory' ] = RealDictCursor if self.PoolConnection_cursor_type is None else self.PoolConnection_cursor_type
return self.PoolConnection_conn.cursor( *args, **kwargs )
elif self.PoolConnection_db_module_name == 'MySQLdb':
# deprecated
args.append( MySQLdb.cursors.DictCursor if self.PoolConnection_cursor_type is None else self.PoolConnection_cursor_type )
return self.PoolConnection_conn.cursor( *args, **kwargs )