[Checkins] SVN: zope.sqlalchemy/branches/sqlalchemy-0.5-support/s make compatible with 0.4 and 0.5

Laurence Rowe l at lrowe.co.uk
Thu Jun 19 16:53:42 EDT 2008


Log message for revision 87564:
  make compatible with 0.4 and 0.5

Changed:
  U   zope.sqlalchemy/branches/sqlalchemy-0.5-support/setup.py
  U   zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/README.txt
  U   zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/datamanager.py
  U   zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/tests.py

-=-
Modified: zope.sqlalchemy/branches/sqlalchemy-0.5-support/setup.py
===================================================================
--- zope.sqlalchemy/branches/sqlalchemy-0.5-support/setup.py	2008-06-19 19:38:50 UTC (rev 87563)
+++ zope.sqlalchemy/branches/sqlalchemy-0.5-support/setup.py	2008-06-19 20:53:26 UTC (rev 87564)
@@ -41,7 +41,7 @@
       install_requires=[
           # -*- Extra requirements: -*-
           'setuptools',
-          'SQLAlchemy>=0.5.0beta1',
+          'SQLAlchemy>=0.4.6',
           'transaction',
           'zope.interface',
       ],

Modified: zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/README.txt
===================================================================
--- zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/README.txt	2008-06-19 19:38:50 UTC (rev 87563)
+++ zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/README.txt	2008-06-19 20:53:26 UTC (rev 87564)
@@ -67,9 +67,19 @@
 scoped sessions. Zope and SQLAlchemy sessions are tied together by using the
 ZopeTransactionExtension from this package.
 
-    >>> Session = scoped_session(sessionmaker(bind=engine, twophase=TEST_TWOPHASE,
-    ... autocommit=False, autoflush=True, extension=ZopeTransactionExtension()))
+    >>> if SA_0_5:
+    ...     Session = scoped_session(sessionmaker(bind=engine,
+    ...     twophase=TEST_TWOPHASE, extension=ZopeTransactionExtension()))
 
+The exact arguments depend on the version. Under SQLAlchemy 0.4 we must also
+supply transactional=True (equivalent to autocommit=False, which is default
+under 0.5).
+
+    >>> if SA_0_4:
+    ...     Session = scoped_session(sessionmaker(bind=engine,
+    ...     twophase=TEST_TWOPHASE, extension=ZopeTransactionExtension(),
+    ...     transactional=True, autoflush=True,))
+
 Call the scoped session factory to retrieve a session. You may call this as
 many times as you like within a transaction and you will always retrieve the
 same session. At present there are no users in the database.

Modified: zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/datamanager.py
===================================================================
--- zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/datamanager.py	2008-06-19 19:38:50 UTC (rev 87563)
+++ zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/datamanager.py	2008-06-19 20:53:26 UTC (rev 87564)
@@ -43,11 +43,7 @@
     implements(ISavepointDataManager)
 
     def __init__(self, session, status):
-        if not session.autocommit:
-            self.tx = session.transaction._iterate_parents()[-1]
-        else:
-            assert session.transaction is None
-            self.tx = session.begin()
+        self.tx = session.transaction._iterate_parents()[-1]
         self.session = session
         _SESSION_STATE[id(session)] = status
         self.state = 'init'

Modified: zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/tests.py
===================================================================
--- zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/tests.py	2008-06-19 19:38:50 UTC (rev 87563)
+++ zope.sqlalchemy/branches/sqlalchemy-0.5-support/src/zope/sqlalchemy/tests.py	2008-06-19 20:53:26 UTC (rev 87564)
@@ -36,7 +36,10 @@
 TEST_TWOPHASE = bool(os.environ.get('TEST_TWOPHASE'))
 TEST_DSN = os.environ.get('TEST_DSN', 'sqlite:///:memory:')
 
+SA_0_4 = sa.__version__.split('.')[:2] == ['0', '4']
+SA_0_5 = not SA_0_4
 
+
 class SimpleModel(object):
     def __init__(self, **kw):
         for k, v in kw.items():
@@ -51,20 +54,31 @@
 engine = sa.create_engine(TEST_DSN)
 engine2 = sa.create_engine(TEST_DSN)
 
-Session = orm.scoped_session(orm.sessionmaker(
-    bind=engine,
-    extension=tx.ZopeTransactionExtension(),
-    autocommit=False,
-    autoflush=True,
-    twophase=TEST_TWOPHASE,
-    ))
+if SA_0_4:
+    Session = orm.scoped_session(orm.sessionmaker(
+        bind=engine,
+        extension=tx.ZopeTransactionExtension(),
+        transactional=True,
+        autoflush=True,
+        twophase=TEST_TWOPHASE,
+        ))
+    UnboundSession = orm.scoped_session(orm.sessionmaker(
+        extension=tx.ZopeTransactionExtension(),
+        transactional=True,
+        autoflush=True,
+        twophase=TEST_TWOPHASE,
+        ))
 
-UnboundSession = orm.scoped_session(orm.sessionmaker(
-    extension=tx.ZopeTransactionExtension(),
-    autocommit=False,
-    autoflush=True,
-    twophase=TEST_TWOPHASE,
-    ))
+if SA_0_5:
+    Session = orm.scoped_session(orm.sessionmaker(
+        bind=engine,
+        extension=tx.ZopeTransactionExtension(),
+        twophase=TEST_TWOPHASE,
+        ))
+    UnboundSession = orm.scoped_session(orm.sessionmaker(
+        extension=tx.ZopeTransactionExtension(),
+        twophase=TEST_TWOPHASE,
+        ))
 
 metadata = sa.MetaData() # best to use unbound metadata
 
@@ -403,5 +417,5 @@
     for cls in (ZopeSQLAlchemyTests, MultipleEngineTests):
         suite.addTest(makeSuite(cls))
     suite.addTest(doctest.DocFileSuite('README.txt', optionflags=optionflags, tearDown=tearDownReadMe,
-        globs={'TEST_DSN': TEST_DSN, 'TEST_TWOPHASE': TEST_TWOPHASE}))
+        globs={'TEST_DSN': TEST_DSN, 'TEST_TWOPHASE': TEST_TWOPHASE, 'SA_0_4': SA_0_4, 'SA_0_5': SA_0_5}))
     return suite



More information about the Checkins mailing list