From: Mike Bayer Date: Thu, 31 Jul 2008 15:02:40 +0000 (+0000) Subject: - added an extremely rudimental set of python 2.3 compatible tests. these X-Git-Tag: rel_0_4_7p1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7f5344b3258748c75a28716651d9dbbfe1d22355;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - added an extremely rudimental set of python 2.3 compatible tests. these can at least confirm that we're even on the grid python 2.3-wise. - fixed usage of native set(), generator expressions - will release 0.4.7p1 --- diff --git a/CHANGES b/CHANGES index d62f2c0f83..e31a4ba38c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,7 @@ ======= CHANGES ======= -0.4.8 +0.4.7p1 ===== - orm - Added "add()" and "add_all()" to scoped_session @@ -13,7 +13,10 @@ CHANGES ScopedSession, "add", instrument("add")) setattr( ScopedSession, "add_all", instrument("add_all")) - + + - Fixed non-2.3 compatible usage of set() and generator + expression within relation(). + 0.4.7 ===== - orm diff --git a/VERSION b/VERSION index cb498ab2c8..82ddaf8b11 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.8 +0.4.7p1 diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index c0fea33704..c8e4038638 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -551,7 +551,7 @@ class PropertyLoader(StrategizedProperty): if self._legacy_foreignkey and not self._refers_to_parent_table(): self.foreign_keys = self._legacy_foreignkey - arg_foreign_keys = set(expression._literal_as_column(x) for x in util.to_set(self.foreign_keys)) + arg_foreign_keys = util.Set([expression._literal_as_column(x) for x in util.to_set(self.foreign_keys)]) if self._arg_local_remote_pairs: if not arg_foreign_keys: @@ -613,7 +613,7 @@ class PropertyLoader(StrategizedProperty): else: eq_pairs = self._arg_local_remote_pairs elif self.remote_side: - remote_side = set(expression._literal_as_column(x) for x in util.to_set(self.remote_side)) + remote_side = util.Set([expression._literal_as_column(x) for x in util.to_set(self.remote_side)]) if self.direction is MANYTOONE: eq_pairs = criterion_as_pairs(self.primaryjoin, consider_as_referenced_keys=remote_side, any_operator=True) diff --git a/test/py23/__init__.py b/test/py23/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/py23/alltests.py b/test/py23/alltests.py new file mode 100644 index 0000000000..733b590b02 --- /dev/null +++ b/test/py23/alltests.py @@ -0,0 +1,19 @@ +import unittest + + +def suite(): + modules_to_test = ( + 'py23.test_sql', + 'py23.test_orm', + ) + alltests = unittest.TestSuite() + for name in modules_to_test: + mod = __import__(name) + for token in name.split('.')[1:]: + mod = getattr(mod, token) + alltests.addTest(unittest.findTestCases(mod, suiteClass=None)) + return alltests + +if __name__ == '__main__': + runner = unittest.TextTestRunner() + runner.run(suite()) diff --git a/test/py23/test_orm.py b/test/py23/test_orm.py new file mode 100644 index 0000000000..cc5dbecc84 --- /dev/null +++ b/test/py23/test_orm.py @@ -0,0 +1,59 @@ +import unittest +from sqlalchemy import * +from sqlalchemy.orm import * + +class ORMTest(unittest.TestCase): + def setUp(self): + global engine, users, addresses + engine = create_engine('sqlite://') + meta = MetaData(engine) + users = Table('users', meta, + Column('id', Integer, primary_key=True), + Column('name', String(255)) + ) + addresses = Table('addresses', meta, + Column('id', Integer, primary_key=True), + Column('email', String(255)), + Column('user_id', Integer, ForeignKey('users.id')) + ) + + meta.create_all() + + + def tearDown(self): + engine.dispose() + + def test_orm_roundtrip(self): + class User(object): + def __init__(self, name): + self.name = name + class Address(object): + def __init__(self, email): + self.email = email + + mapper(User, users, properties={ + 'addresses':relation(Address, backref='user', cascade="all, delete-orphan") + }) + mapper(Address, addresses) + + sess = sessionmaker()() + u1 = User('ed') + u2 = User('wendy') + u1.addresses.append(Address('ed@ed.com')) + u2.addresses.append(Address('wendy@wendy.com')) + sess.add_all([u1, u2]) + sess.commit() + + self.assertEquals(sess.query(User).order_by(User.name).all(), [u1, u2]) + + sess.clear() + u1 = sess.query(User).get(1) + self.assertEquals(u1.name, 'ed') + self.assertEquals(u1.addresses[0].email, 'ed@ed.com') + sess.delete(u1) + sess.commit() + self.assertEquals(sess.query(User).count(), 1) + + +if __name__ == '__main__': + unittest.main() diff --git a/test/py23/test_sql.py b/test/py23/test_sql.py new file mode 100644 index 0000000000..dbf72fe03f --- /dev/null +++ b/test/py23/test_sql.py @@ -0,0 +1,36 @@ +import unittest +from sqlalchemy import * + +class SQLTest(unittest.TestCase): + def setUp(self): + global engine + engine = create_engine('sqlite://') + + def tearDown(self): + engine.dispose() + + def test_select_roundtrip(self): + meta = MetaData(engine) + users = Table('users', meta, + Column('id', Integer, primary_key=True), + Column('name', String(255)) + ) + addresses = Table('addresses', meta, + Column('id', Integer, primary_key=True), + Column('email', String(255)), + Column('user_id', Integer, ForeignKey('users.id')) + ) + + meta.create_all() + users.insert().execute(id=1, name='ed') + users.insert().execute(id=2, name='wendy') + addresses.insert().execute(id=1, user_id=1, email='ed@foo.com') + addresses.insert().execute(id=2, user_id=2, email='wendy@foo.com') + self.assertEquals(users.join(addresses).select().execute().fetchall(), + [(1, 'ed', 1, 'ed@foo.com', 1), (2, 'wendy', 2, 'wendy@foo.com', 2)] + ) + + + +if __name__ == '__main__': + unittest.main()