[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