[Checkins] SVN: z3c.sqlalchemy/trunk/ merged declarative branch

Andreas Jung andreas at andreas-jung.com
Mon Jun 2 11:05:18 EDT 2008


Log message for revision 87110:
  merged declarative branch
  

Changed:
  U   z3c.sqlalchemy/trunk/CHANGES.txt
  U   z3c.sqlalchemy/trunk/setup.py
  U   z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/model.py
  U   z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/tests/testSQLAlchemy.py

-=-
Modified: z3c.sqlalchemy/trunk/CHANGES.txt
===================================================================
--- z3c.sqlalchemy/trunk/CHANGES.txt	2008-06-02 15:02:17 UTC (rev 87109)
+++ z3c.sqlalchemy/trunk/CHANGES.txt	2008-06-02 15:05:18 UTC (rev 87110)
@@ -1,3 +1,8 @@
+1.3.0 (unreleased)
+------------------
+
+  - support for sqlalchemy.ext.declarative
+
 1.2.0 (25.05.2008)
 ------------------
 

Modified: z3c.sqlalchemy/trunk/setup.py
===================================================================
--- z3c.sqlalchemy/trunk/setup.py	2008-06-02 15:02:17 UTC (rev 87109)
+++ z3c.sqlalchemy/trunk/setup.py	2008-06-02 15:05:18 UTC (rev 87110)
@@ -21,7 +21,7 @@
     'Topic :: Software Development :: Libraries :: Python Modules',
 ]
 
-version = '1.2.1-dev'
+version = '1.3.0-dev'
 
 desc = open('README.txt').read().strip()
 changes = open('CHANGES.txt').read().strip()
@@ -48,8 +48,9 @@
       install_requires=['setuptools',
                         'SQLAlchemy>=0.4.6',
                         'zope.sqlalchemy',
-#                        'zope.component==3.3',
-#                        'zope.interface==3.3',
-#                        'zope.schema==3.3',
+                        'zope.component',
+                        'zope.interface==3.3',
+                        'zope.schema==3.3',
+                        'zope.testing',
                        ],
-      extras_require=dict(test=['pysqlite']))
+      extras_require=dict(test=['pysqlite', 'zope.testing']))

Modified: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/model.py
===================================================================
--- z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/model.py	2008-06-02 15:02:17 UTC (rev 87109)
+++ z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/model.py	2008-06-02 15:05:18 UTC (rev 87110)
@@ -56,16 +56,17 @@
 
             'table_name' -- optional full name of a table (e.g. 'someschema.sometable') if
             you want to use 'name' as alias for the table.
-        
+
             'cascade' -- optional cascade parameter directly passed to the relation() call
         """
 
         if table is not None and not isinstance(table, sqlalchemy.Table):
             raise TypeError("'table' must be an instance or sqlalchemy.Table or None")
 
-        if mapper_class is not None and not issubclass(mapper_class, MappedClassBase):
-            raise TypeError("'mapper_class' must be a subclass of MappedClassBase")
-        
+        # sqlalchemy.ext.declarative can be used on _any_ base class
+#        if mapper_class is not None and not issubclass(mapper_class, MappedClassBase):
+#            raise TypeError("'mapper_class' must be a subclass of MappedClassBase")
+
         if relations is not None:
 
             if not isinstance(relations, (tuple, list)):

Modified: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/tests/testSQLAlchemy.py
===================================================================
--- z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/tests/testSQLAlchemy.py	2008-06-02 15:02:17 UTC (rev 87109)
+++ z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/tests/testSQLAlchemy.py	2008-06-02 15:05:18 UTC (rev 87110)
@@ -17,7 +17,11 @@
 import sqlalchemy
 
 from sqlalchemy import MetaData, Integer, String, Column, Table
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import relation
+from sqlalchemy.schema import ForeignKey
 
+
 from zope.interface.verify import verifyClass
 
 from z3c.sqlalchemy.interfaces import ISQLAlchemyWrapper, IModel
@@ -89,15 +93,15 @@
         self.assertEqual(User, myUser)
 
 
-    def testCustomMapperClassWithWrongType(self):
+#    def testCustomMapperClassWithWrongType(self):
+#
+#        class myUser(object): 
+#            pass
+#
+#        M = Model()
+#        self.assertRaises(TypeError, M.add, 'users', mapper_class=myUser)
 
-        class myUser(object): 
-            pass
 
-        M = Model()
-        self.assertRaises(TypeError, M.add, 'users', mapper_class=myUser)
-
-
     def testGetMappers(self):
 
         db = createSAWrapper(self.dsn)
@@ -196,6 +200,56 @@
         self.assertEqual(len(rows), 2)
 
 
+    def testDeclarative(self):
+
+        db = createSAWrapper(self.dsn)
+        session = db.session
+        metadata = db.metadata
+        Base = declarative_base(metadata = db.metadata)
+
+        class Foo(Base):
+            __tablename__ = 'foo'
+
+            id = Column('id', Integer, primary_key=True)
+            name = Column('name', String(50))
+
+        Base.metadata.create_all(db._engine)
+
+        session.save(Foo(id=1, name='Andreas Jung'))
+        session.save(Foo(id=2, name='Peter Becker'))
+        session.flush()
+
+        rows = session.query(Foo).all()
+        self.assertEqual(len(rows), 2)
+
+
+    def testDeclarativeWithModel(self):
+        def getModel(metadata):
+
+            model = Model()
+            Base = declarative_base(metadata=metadata)
+
+            class Foo(Base):
+                __tablename__ = 'foo'
+
+                id = Column('id', Integer, primary_key=True)
+                name = Column('name', String(50))
+
+            model.add('foo', mapper_class=Foo)
+            Base.metadata.create_all()
+            return model
+
+        db = createSAWrapper(self.dsn, model=getModel)
+        session = db.session
+        Foo = db.getMapper('foo')
+
+        session.save(Foo(id=1, name='Andreas Jung'))
+        session.save(Foo(id=2, name='Peter Becker'))
+        session.flush()
+
+        rows = session.query(Foo).all()
+        self.assertEqual(len(rows), 2)
+
 def test_suite():
     from unittest import TestSuite, makeSuite
     suite = TestSuite()



More information about the Checkins mailing list