[Checkins] SVN: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/base.py.debug removed

Andreas Jung andreas at andreas-jung.com
Wed May 2 11:26:33 EDT 2007


Log message for revision 75011:
  removed
  

Changed:
  D   z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/base.py.debug

-=-
Deleted: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/base.py.debug
===================================================================
--- z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/base.py.debug	2007-05-02 15:15:04 UTC (rev 75010)
+++ z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/base.py.debug	2007-05-02 15:26:32 UTC (rev 75011)
@@ -1,261 +0,0 @@
-##########################################################################
-# z3c.sqlalchemy - A SQLAlchemy wrapper for Python/Zope
-#
-# (C) Zope Corporation and Contributor
-# Written by Andreas Jung for Haufe Mediengruppe, Freiburg, Germany
-# and ZOPYX Ltd. & Co. KG, Tuebingen, Germany
-##########################################################################
-
-import threading
-
-import sqlalchemy
-from sqlalchemy.engine.url import make_url
-
-from zope.interface import implements
-from zope.component import getUtility
-from zope.component.interfaces import ComponentLookupError
-
-from z3c.sqlalchemy.interfaces import ISQLAlchemyWrapper, IModelProvider
-from z3c.sqlalchemy.model import Model
-from z3c.sqlalchemy.mapper import LazyMapperCollection
-
-import transaction
-from transaction.interfaces import IDataManager
-
-def log(s):
-    print '*** %s - %s' % (threading.currentThread(), s)
-
-
-class BaseWrapper(object):
-
-    implements(ISQLAlchemyWrapper)
-
-    def __init__(self, dsn, model=None, **kw):
-        """ 'dsn' - a RFC-1738-style connection string
-
-            'model' - optional instance of model.Model
-
-            'kw' - optional keyword arguments passed to create_engine()
-        """
-
-        self.dsn = dsn
-        self.url = make_url(dsn)
-        self.host = self.url.host
-        self.port = self.url.port
-        self.username = self.url.username
-        self.password = self.url.password
-        self.dbname = self.url.database 
-        self.drivername = self.url.drivername
-        self.kw = kw
-        self.echo = kw.get('echo', False)
-        self._engine = self._createEngine()
-        self._engine.echo = self.echo
-        self._model = None
-
-
-        if model:
-
-            if isinstance(model, Model):
-                self._model = model
-
-            elif isinstance(model, basestring):
-
-                try:
-                    util = getUtility(IModelProvider, model)
-                except ComponentLookupError:
-                    raise ComponentLookupError("No named utility '%s' providing IModelProvider found" % model)
-
-
-                self._model = util.getModel(self.metadata)
-
-            elif callable(model):                        
-
-                self._model = model(self.metadata)
-
-
-            else:
-                raise ValueError("The 'model' parameter passed to constructor must either be "\
-                                 "the name of a named utility implementing IModelProvider or "\
-                                 "an instance of z3c.sqlalchemy.model.Model.")
-
-            if not isinstance(self._model, Model):
-                raise TypeError('_model is not an instance of model.Model')
-
-
-        # mappers must be initialized at last since we need to acces
-        # the 'model' from within the constructor of LazyMapperCollection
-        self._mappers = LazyMapperCollection(self)
-
-    @property
-    def metadata(self):
-        return sqlalchemy.BoundMetaData(self._engine)
-
-    @property
-    def session(self):
-        return sqlalchemy.create_session(self._engine)
-
-    def registerMapper(self, mapper, name):
-        self._mappers.registerMapper(mapper, name)
-
-    def getMapper(self, tablename, schema='public'):
-        return self._mappers.getMapper(tablename, schema)
-
-    def getMappers(self, *names):
-        return tuple([self.getMapper(name) for name in names])
-
-    @property
-    def engine(self):
-        """ only for private purposes! """
-        return self._engine
-
-    @property
-    def model(self):
-        """ only for private purposes! """
-        return self._model
-
-    def _createEngine(self):
-        return sqlalchemy.create_engine(self.dsn, **self.kw)
-
-_session_cache = threading.local() # module-level cache 
-_connection_cache = threading.local() # module-level cache 
-
-
-class SessionDataManager(object):
-    """ Wraps session into transaction context of Zope """
-
-    implements(IDataManager)
-
-    def __init__(self, session):
-        self.session = session
-        self.transaction = session.create_transaction()
-
-    def tpc_begin(self, trans):
-        pass
-
-    def abort(self, trans):
-        self.transaction.rollback()
-
-    def commit(self, trans):
-        self.session.flush()
-        self.transaction.commit()
-
-    def tpc_vote(self, trans):
-        pass
-
-    def tpc_finish(self, trans):
-        pass
-
-    def tpc_abort(self, trans):
-        pass
-
-    def sortKey(self):
-        return str(id(self))
-
-
-class ConnectionDataManager(object):
-    """ Wraps connection into transaction context of Zope """
-
-    implements(IDataManager)
-
-    def __init__(self, connection):
-        self.connection = connection
-        self.transaction = connection.begin()
-
-    def tpc_begin(self, trans):
-        log('tpc_begin() - %s' % trans)
-        pass
-
-    def abort(self, trans):
-        self.transaction.rollback()
-        self.connection.close()
-        self.connection = None
-        log('abort() - %s' % trans)
-
-    def commit(self, trans):
-        self.transaction.commit()
-        log('commit() - %s' % trans)
-        self.connection.close()
-        self.connection = None
-
-    def tpc_vote(self, trans):
-        pass
-
-    def tpc_finish(self, trans):
-        log('tcp_finish() - %s' % trans)
-        pass
-
-    def tpc_abort(self, trans):
-        log('tcp_abort() - %s' % trans)
-        pass
-
-    def sortKey(self):
-        return str(id(self))
-
-
-class ZopeBaseWrapper(BaseWrapper):
-    """ A wrapper to be used from within Zope. It connects
-        the session with the transaction management of Zope.
-    """
-
-    @property
-    def session(self):
-
-        if not hasattr(_session_cache, 'last_transaction'):
-            _session_cache.last_transaction = None
-            _session_cache.last_session = None
-
-        # get current transaction
-        txn = transaction.get()
-        txn_str = str(txn)
-
-        # return cached session if we are within the same transaction
-        # and same thread
-        if txn_str == _session_cache.last_transaction:
-            return _session_cache.last_session
-
-        # no cached session, let's create a new one
-        session = sqlalchemy.create_session(self._engine)
-                                          
-        # register a DataManager with the current transaction
-        txn.join(SessionDataManager(session))
-
-        # update thread-local cache
-        _session_cache.last_transaction = txn_str
-        _session_cache.last_session = session
-
-        # return the session
-        return session 
-
-    @property
-    def connection(self):
-
-        if not hasattr(_connection_cache, 'last_connection'):
-            _connection_cache.last_transaction = None
-            _connection_cache.last_connection = None
-
-        # get current transaction
-        txn = transaction.get()
-        txn_str = str(txn)
-        log('current thread - %s' % threading.currentThread())
-        log('checking for transaction - %s' % txn_str)
-
-        # return cached connection if we are within the same transaction
-        # and same thread
-        if txn_str == _connection_cache.last_transaction:
-            log('returning cached connection - %s' % _connection_cache.last_connection)
-            return _connection_cache.last_connection
-
-        # no cached connection, let's create a new one
-        connection = self.engine.connect()
-        log('creating new connection - %s' % connection)
-                                          
-        # register a DataManager with the current transaction
-        txn.join(ConnectionDataManager(connection))
-
-        # update thread-local cache
-        _connection_cache.last_transaction = txn_str
-        _connection_cache.last_connection = connection
-
-        # return the connection
-        return connection
-



More information about the Checkins mailing list