[Sqlalchemy-commits] [1423] sqlalchemy/branches/schema/test: got inheritance unittest in 0.2 style,
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-05-08 17:10:37
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[1423] sqlalchemy/branches/schema/test: got inheritance unittest in 0.2 style, some fixes to mysql</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1423</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-05-08 12:10:07 -0500 (Mon, 08 May 2006)</dd> </dl> <h3>Log Message</h3> <pre>got inheritance unittest in 0.2 style, some fixes to mysql</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemybranchesschemalibsqlalchemydatabasesmysqlpy">sqlalchemy/branches/schema/lib/sqlalchemy/databases/mysql.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyenginebasepy">sqlalchemy/branches/schema/lib/sqlalchemy/engine/base.py</a></li> <li><a href="#sqlalchemybranchesschematestinheritancepy">sqlalchemy/branches/schema/test/inheritance.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemybranchesschemalibsqlalchemydatabasesmysqlpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/databases/mysql.py (1422 => 1423)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/databases/mysql.py 2006-05-08 16:31:28 UTC (rev 1422) +++ sqlalchemy/branches/schema/lib/sqlalchemy/databases/mysql.py 2006-05-08 17:10:07 UTC (rev 1423) </span><span class="lines">@@ -6,14 +6,11 @@ </span><span class="cx"> </span><span class="cx"> import sys, StringIO, string, types, re, datetime </span><span class="cx"> </span><del>-import sqlalchemy.sql as sql -import sqlalchemy.engine as engine -import sqlalchemy.schema as schema -import sqlalchemy.ansisql as ansisql </del><ins>+from sqlalchemy import sql,engine,schema,ansisql +from sqlalchemy.engine import default </ins><span class="cx"> import sqlalchemy.types as sqltypes </span><del>-from sqlalchemy import * </del><span class="cx"> import sqlalchemy.databases.information_schema as ischema </span><del>-from sqlalchemy.exceptions import * </del><ins>+import sqlalchemy.exceptions as exceptions </ins><span class="cx"> </span><span class="cx"> try: </span><span class="cx"> import MySQLdb as mysql </span><span class="lines">@@ -26,7 +23,7 @@ </span><span class="cx"> class MSDouble(sqltypes.Numeric): </span><span class="cx"> def __init__(self, precision = None, length = None): </span><span class="cx"> if (precision is None and length is not None) or (precision is not None and length is None): </span><del>- raise ArgumentError("You must specify both precision and length or omit both altogether.") </del><ins>+ raise exceptions.ArgumentError("You must specify both precision and length or omit both altogether.") </ins><span class="cx"> super(MSDouble, self).__init__(precision, length) </span><span class="cx"> def get_col_spec(self): </span><span class="cx"> if self.precision is not None and self.length is not None: </span><span class="lines">@@ -271,7 +268,7 @@ </span><span class="cx"> if column.primary_key: </span><span class="cx"> if not override_pk: </span><span class="cx"> colspec += " PRIMARY KEY" </span><del>- if not column.foreign_key and first_pk and isinstance(column.type, types.Integer): </del><ins>+ if not column.foreign_key and first_pk and isinstance(column.type, sqltypes.Integer): </ins><span class="cx"> colspec += " AUTO_INCREMENT" </span><span class="cx"> if column.foreign_key: </span><span class="cx"> colspec += ", FOREIGN KEY (%s) REFERENCES %s(%s)" % (column.name, column.foreign_key.column.table.name, column.foreign_key.column.name) </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyenginebasepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/engine/base.py (1422 => 1423)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/engine/base.py 2006-05-08 16:31:28 UTC (rev 1422) +++ sqlalchemy/branches/schema/lib/sqlalchemy/engine/base.py 2006-05-08 17:10:07 UTC (rev 1423) </span><span class="lines">@@ -195,7 +195,7 @@ </span><span class="cx"> return Connection.executors[type(object).__mro__[-2]](self, object, *multiparams, **params) </span><span class="cx"> def execute_default(self, default, **kwargs): </span><span class="cx"> return default.accept_schema_visitor(self.engine.dialect.defaultrunner(self.engine, self.proxy, **kwargs)) </span><del>- def execute_text(self, statement, parameters): </del><ins>+ def execute_text(self, statement, parameters=None): </ins><span class="cx"> cursor = self._execute_raw(statement, parameters) </span><span class="cx"> return ResultProxy(self.engine, self, cursor) </span><span class="cx"> def _params_to_listofdicts(self, *multiparams, **params): </span></span></pre></div> <a id="sqlalchemybranchesschematestinheritancepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/inheritance.py (1422 => 1423)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/inheritance.py 2006-05-08 16:31:28 UTC (rev 1422) +++ sqlalchemy/branches/schema/test/inheritance.py 2006-05-08 17:10:07 UTC (rev 1423) </span><span class="lines">@@ -5,7 +5,9 @@ </span><span class="cx"> import sys </span><span class="cx"> </span><span class="cx"> class Principal( object ): </span><del>- pass </del><ins>+ def __init__(self, **kwargs): + for key, value in kwargs.iteritems(): + setattr(self, key, value) </ins><span class="cx"> </span><span class="cx"> class User( Principal ): </span><span class="cx"> pass </span><span class="lines">@@ -20,16 +22,18 @@ </span><span class="cx"> global users </span><span class="cx"> global groups </span><span class="cx"> global user_group_map </span><ins>+ global metadata + metadata = BoundMetaData(testbase.db) </ins><span class="cx"> principals = Table( </span><span class="cx"> 'principals', </span><del>- testbase.metadata, </del><ins>+ metadata, </ins><span class="cx"> Column('principal_id', Integer, Sequence('principal_id_seq', optional=False), primary_key=True), </span><span class="cx"> Column('name', String(50), nullable=False), </span><span class="cx"> ) </span><span class="cx"> </span><span class="cx"> users = Table( </span><span class="cx"> 'prin_users', </span><del>- testbase.metadata, </del><ins>+ metadata, </ins><span class="cx"> Column('principal_id', Integer, ForeignKey('principals.principal_id'), primary_key=True), </span><span class="cx"> Column('password', String(50), nullable=False), </span><span class="cx"> Column('email', String(50), nullable=False), </span><span class="lines">@@ -39,14 +43,14 @@ </span><span class="cx"> </span><span class="cx"> groups = Table( </span><span class="cx"> 'prin_groups', </span><del>- testbase.metadata, </del><ins>+ metadata, </ins><span class="cx"> Column( 'principal_id', Integer, ForeignKey('principals.principal_id'), primary_key=True), </span><span class="cx"> </span><span class="cx"> ) </span><span class="cx"> </span><span class="cx"> user_group_map = Table( </span><span class="cx"> 'prin_user_group_map', </span><del>- testbase.metadata, </del><ins>+ metadata, </ins><span class="cx"> Column('user_id', Integer, ForeignKey( "prin_users.principal_id"), primary_key=True ), </span><span class="cx"> Column('group_id', Integer, ForeignKey( "prin_groups.principal_id"), primary_key=True ), </span><span class="cx"> #Column('user_id', Integer, ForeignKey( "prin_users.principal_id"), ), </span><span class="lines">@@ -54,65 +58,57 @@ </span><span class="cx"> </span><span class="cx"> ) </span><span class="cx"> </span><del>- principals.create() - users.create() - groups.create() - user_group_map.create() </del><ins>+ metadata.create_all() + </ins><span class="cx"> def tearDownAll(self): </span><del>- user_group_map.drop() - groups.drop() - users.drop() - principals.drop() - testbase.metadata.tables.clear() </del><ins>+ metadata.drop_all() + </ins><span class="cx"> def setUp(self): </span><del>- objectstore.clear() </del><span class="cx"> clear_mappers() </span><span class="cx"> </span><span class="cx"> def testbasic(self): </span><del>- assign_mapper( Principal, principals ) - assign_mapper( </del><ins>+ mapper( Principal, principals ) + mapper( </ins><span class="cx"> User, </span><span class="cx"> users, </span><del>- inherits=Principal.mapper </del><ins>+ inherits=Principal </ins><span class="cx"> ) </span><span class="cx"> </span><del>- assign_mapper( </del><ins>+ mapper( </ins><span class="cx"> Group, </span><span class="cx"> groups, </span><del>- inherits=Principal.mapper, - properties=dict( users = relation(User.mapper, user_group_map, lazy=True, backref="groups") ) </del><ins>+ inherits=Principal, + properties=dict( users = relation(User, secondary=user_group_map, lazy=True, backref="groups") ) </ins><span class="cx"> ) </span><span class="cx"> </span><span class="cx"> g = Group(name="group1") </span><span class="cx"> g.users.append(User(name="user1", password="pw", email="fo...@ba...", login_id="lg1")) </span><del>- - objectstore.flush() </del><ins>+ sess = create_session() + sess.save(g) + sess.flush() </ins><span class="cx"> # TODO: put an assertion </span><span class="cx"> </span><span class="cx"> class InheritTest2(testbase.AssertMixin): </span><span class="cx"> """deals with inheritance and many-to-many relationships""" </span><span class="cx"> def setUpAll(self): </span><del>- engine = testbase.metadata - global foo, bar, foo_bar - foo = Table('foo', engine, </del><ins>+ global foo, bar, foo_bar, metadata + metadata = BoundMetaData(testbase.db) + foo = Table('foo', metadata, </ins><span class="cx"> Column('id', Integer, Sequence('foo_id_seq'), primary_key=True), </span><span class="cx"> Column('data', String(20)), </span><span class="cx"> ).create() </span><span class="cx"> </span><del>- bar = Table('bar', engine, </del><ins>+ bar = Table('bar', metadata, </ins><span class="cx"> Column('bid', Integer, ForeignKey('foo.id'), primary_key=True), </span><span class="cx"> #Column('fid', Integer, ForeignKey('foo.id'), ) </span><span class="cx"> ).create() </span><span class="cx"> </span><del>- foo_bar = Table('foo_bar', engine, </del><ins>+ foo_bar = Table('foo_bar', metadata, </ins><span class="cx"> Column('foo_id', Integer, ForeignKey('foo.id')), </span><span class="cx"> Column('bar_id', Integer, ForeignKey('bar.bid'))).create() </span><del>- </del><ins>+ metadata.create_all() </ins><span class="cx"> def tearDownAll(self): </span><del>- foo_bar.drop() - bar.drop() - foo.drop() - testbase.metadata.tables.clear() </del><ins>+ metadata.drop_all() </ins><span class="cx"> </span><span class="cx"> def testbasic(self): </span><span class="cx"> class Foo(object): </span><span class="lines">@@ -123,33 +119,28 @@ </span><span class="cx"> def __repr__(self): </span><span class="cx"> return str(self) </span><span class="cx"> </span><del>- Foo.mapper = mapper(Foo, foo) </del><ins>+ mapper(Foo, foo) </ins><span class="cx"> class Bar(Foo): </span><span class="cx"> def __str__(self): </span><span class="cx"> return "Bar(%s)" % self.data </span><span class="cx"> </span><del>- Bar.mapper = mapper(Bar, bar, inherits=Foo.mapper, properties = { - # the old way, you needed to explicitly set up a compound - # column like this. but now the mapper uses SyncRules to match up - # the parent/child inherited columns - #'id':[bar.c.bid, foo.c.id] - }) </del><ins>+ mapper(Bar, bar, inherits=Foo, properties={ + 'foos': relation(Foo, secondary=foo_bar, lazy=False) + }) + + sess = create_session() + b = Bar('barfoo', _sa_session=sess) + sess.flush() </ins><span class="cx"> </span><del>- #Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, primaryjoin=bar.c.bid==foo_bar.c.bar_id, secondaryjoin=foo_bar.c.foo_id==foo.c.id, lazy=False)) - Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, lazy=False)) - - b = Bar('barfoo') - objectstore.flush() - </del><span class="cx"> f1 = Foo('subfoo1') </span><span class="cx"> f2 = Foo('subfoo2') </span><span class="cx"> b.foos.append(f1) </span><span class="cx"> b.foos.append(f2) </span><span class="cx"> </span><del>- objectstore.flush() - objectstore.clear() </del><ins>+ sess.flush() + sess.clear() </ins><span class="cx"> </span><del>- l =b.mapper.select() </del><ins>+ l = sess.query(Bar).select() </ins><span class="cx"> print l[0] </span><span class="cx"> print l[0].foos </span><span class="cx"> self.assert_result(l, Bar, </span><span class="lines">@@ -160,44 +151,38 @@ </span><span class="cx"> class InheritTest3(testbase.AssertMixin): </span><span class="cx"> """deals with inheritance and many-to-many relationships""" </span><span class="cx"> def setUpAll(self): </span><del>- engine = testbase.metadata - global foo, bar, blub, bar_foo, blub_bar, blub_foo,tables - engine.engine.echo = 'debug' </del><ins>+ global foo, bar, blub, bar_foo, blub_bar, blub_foo,metadata + metadata = BoundMetaData(testbase.db) </ins><span class="cx"> # the 'data' columns are to appease SQLite which cant handle a blank INSERT </span><del>- foo = Table('foo', engine, </del><ins>+ foo = Table('foo', metadata, </ins><span class="cx"> Column('id', Integer, Sequence('foo_seq'), primary_key=True), </span><span class="cx"> Column('data', String(20))) </span><span class="cx"> </span><del>- bar = Table('bar', engine, </del><ins>+ bar = Table('bar', metadata, </ins><span class="cx"> Column('id', Integer, ForeignKey('foo.id'), primary_key=True), </span><span class="cx"> Column('data', String(20))) </span><span class="cx"> </span><del>- blub = Table('blub', engine, </del><ins>+ blub = Table('blub', metadata, </ins><span class="cx"> Column('id', Integer, ForeignKey('bar.id'), primary_key=True), </span><span class="cx"> Column('data', String(20))) </span><span class="cx"> </span><del>- bar_foo = Table('bar_foo', engine, </del><ins>+ bar_foo = Table('bar_foo', metadata, </ins><span class="cx"> Column('bar_id', Integer, ForeignKey('bar.id')), </span><span class="cx"> Column('foo_id', Integer, ForeignKey('foo.id'))) </span><span class="cx"> </span><del>- blub_bar = Table('bar_blub', engine, </del><ins>+ blub_bar = Table('bar_blub', metadata, </ins><span class="cx"> Column('blub_id', Integer, ForeignKey('blub.id')), </span><span class="cx"> Column('bar_id', Integer, ForeignKey('bar.id'))) </span><span class="cx"> </span><del>- blub_foo = Table('blub_foo', engine, </del><ins>+ blub_foo = Table('blub_foo', metadata, </ins><span class="cx"> Column('blub_id', Integer, ForeignKey('blub.id')), </span><span class="cx"> Column('foo_id', Integer, ForeignKey('foo.id'))) </span><del>- - tables = [foo, bar, blub, bar_foo, blub_bar, blub_foo] - for table in tables: - table.create() </del><ins>+ metadata.create_all() </ins><span class="cx"> def tearDownAll(self): </span><del>- for table in reversed(tables): - table.drop() - testbase.metadata.tables.clear() </del><ins>+ metadata.drop_all() </ins><span class="cx"> </span><span class="cx"> def tearDown(self): </span><del>- for table in reversed(tables): </del><ins>+ for table in metadata.table_iterator(): </ins><span class="cx"> table.delete().execute() </span><span class="cx"> </span><span class="cx"> def testbasic(self): </span><span class="lines">@@ -206,24 +191,24 @@ </span><span class="cx"> self.data = data </span><span class="cx"> def __repr__(self): </span><span class="cx"> return "Foo id %d, data %s" % (self.id, self.data) </span><del>- Foo.mapper = mapper(Foo, foo) </del><ins>+ mapper(Foo, foo) </ins><span class="cx"> </span><span class="cx"> class Bar(Foo): </span><span class="cx"> def __repr__(self): </span><span class="cx"> return "Bar id %d, data %s" % (self.id, self.data) </span><span class="cx"> </span><del>- Bar.mapper = mapper(Bar, bar, inherits=Foo.mapper, properties={ - #'foos' :relation(Foo.mapper, bar_foo, primaryjoin=bar.c.id==bar_foo.c.bar_id, lazy=False) - 'foos' :relation(Foo.mapper, bar_foo, lazy=True) </del><ins>+ mapper(Bar, bar, inherits=Foo, properties={ + 'foos' :relation(Foo, secondary=bar_foo, lazy=True) </ins><span class="cx"> }) </span><span class="cx"> </span><del>- b = Bar('bar #1') </del><ins>+ sess = create_session() + b = Bar('bar #1', _sa_session=sess) </ins><span class="cx"> b.foos.append(Foo("foo #1")) </span><span class="cx"> b.foos.append(Foo("foo #2")) </span><del>- objectstore.flush() </del><ins>+ sess.flush() </ins><span class="cx"> compare = repr(b) + repr(b.foos) </span><del>- objectstore.clear() - l = Bar.mapper.select() </del><ins>+ sess.clear() + l = sess.query(Bar).select() </ins><span class="cx"> self.echo(repr(l[0]) + repr(l[0].foos)) </span><span class="cx"> self.assert_(repr(l[0]) + repr(l[0].foos) == compare) </span><span class="cx"> </span><span class="lines">@@ -233,83 +218,66 @@ </span><span class="cx"> self.data = data </span><span class="cx"> def __repr__(self): </span><span class="cx"> return "Foo id %d, data %s" % (self.id, self.data) </span><del>- Foo.mapper = mapper(Foo, foo) </del><ins>+ mapper(Foo, foo) </ins><span class="cx"> </span><span class="cx"> class Bar(Foo): </span><span class="cx"> def __repr__(self): </span><span class="cx"> return "Bar id %d, data %s" % (self.id, self.data) </span><del>- Bar.mapper = mapper(Bar, bar, inherits=Foo.mapper) </del><ins>+ mapper(Bar, bar, inherits=Foo) </ins><span class="cx"> </span><span class="cx"> class Blub(Bar): </span><span class="cx"> def __repr__(self): </span><span class="cx"> return "Blub id %d, data %s, bars %s, foos %s" % (self.id, self.data, repr([b for b in self.bars]), repr([f for f in self.foos])) </span><span class="cx"> </span><del>- Blub.mapper = mapper(Blub, blub, inherits=Bar.mapper, properties={ -# 'bars':relation(Bar.mapper, blub_bar, primaryjoin=blub.c.id==blub_bar.c.blub_id, lazy=False), -# 'foos':relation(Foo.mapper, blub_foo, primaryjoin=blub.c.id==blub_foo.c.blub_id, lazy=False), - 'bars':relation(Bar.mapper, blub_bar, lazy=False), - 'foos':relation(Foo.mapper, blub_foo, lazy=False), </del><ins>+ mapper(Blub, blub, inherits=Bar, properties={ + 'bars':relation(Bar, secondary=blub_bar, lazy=False), + 'foos':relation(Foo, secondary=blub_foo, lazy=False), </ins><span class="cx"> }) </span><span class="cx"> </span><del>- useobjects = True - if (useobjects): - f1 = Foo("foo #1") - b1 = Bar("bar #1") - b2 = Bar("bar #2") - bl1 = Blub("blub #1") - bl1.foos.append(f1) - bl1.bars.append(b2) - objectstore.flush() - compare = repr(bl1) - blubid = bl1.id - objectstore.clear() - else: - foo.insert().execute(data='foo #1') - foo.insert().execute(data='foo #2') - bar.insert().execute(id=1, data="bar #1") - bar.insert().execute(id=2, data="bar #2") - blub.insert().execute(id=1, data="blub #1") - blub_bar.insert().execute(blub_id=1, bar_id=2) - blub_foo.insert().execute(blub_id=1, foo_id=2) </del><ins>+ sess = create_session() + f1 = Foo("foo #1", _sa_session=sess) + b1 = Bar("bar #1", _sa_session=sess) + b2 = Bar("bar #2", _sa_session=sess) + bl1 = Blub("blub #1", _sa_session=sess) + bl1.foos.append(f1) + bl1.bars.append(b2) + sess.flush() + compare = repr(bl1) + blubid = bl1.id + sess.clear() </ins><span class="cx"> </span><del>- l = Blub.mapper.select() </del><ins>+ l = sess.query(Blub).select() </ins><span class="cx"> self.echo(l) </span><span class="cx"> self.assert_(repr(l[0]) == compare) </span><del>- objectstore.clear() - x = Blub.mapper.get_by(id=blubid) #traceback 2 </del><ins>+ sess.clear() + x = sess.query(Blub).get_by(id=blubid) </ins><span class="cx"> self.echo(x) </span><span class="cx"> self.assert_(repr(x) == compare) </span><span class="cx"> </span><span class="cx"> class InheritTest4(testbase.AssertMixin): </span><span class="cx"> """deals with inheritance and one-to-many relationships""" </span><span class="cx"> def setUpAll(self): </span><del>- engine = testbase.metadata - global foo, bar, blub, tables - engine.engine.echo = 'debug' </del><ins>+ global foo, bar, blub, metadata + metadata = BoundMetaData(testbase.db) </ins><span class="cx"> # the 'data' columns are to appease SQLite which cant handle a blank INSERT </span><del>- foo = Table('foo', engine, </del><ins>+ foo = Table('foo', metadata, </ins><span class="cx"> Column('id', Integer, Sequence('foo_seq'), primary_key=True), </span><span class="cx"> Column('data', String(20))) </span><span class="cx"> </span><del>- bar = Table('bar', engine, </del><ins>+ bar = Table('bar', metadata, </ins><span class="cx"> Column('id', Integer, ForeignKey('foo.id'), primary_key=True), </span><span class="cx"> Column('data', String(20))) </span><span class="cx"> </span><del>- blub = Table('blub', engine, </del><ins>+ blub = Table('blub', metadata, </ins><span class="cx"> Column('id', Integer, ForeignKey('bar.id'), primary_key=True), </span><span class="cx"> Column('foo_id', Integer, ForeignKey('foo.id'), nullable=False), </span><span class="cx"> Column('data', String(20))) </span><del>- - tables = [foo, bar, blub] - for table in tables: - table.create() </del><ins>+ metadata.create_all() </ins><span class="cx"> def tearDownAll(self): </span><del>- for table in reversed(tables): - table.drop() - testbase.metadata.tables.clear() </del><ins>+ metadata.drop_all() </ins><span class="cx"> </span><span class="cx"> def tearDown(self): </span><del>- for table in reversed(tables): </del><ins>+ for table in metadata.table_iterator(): </ins><span class="cx"> table.delete().execute() </span><span class="cx"> </span><span class="cx"> def testbasic(self): </span><span class="lines">@@ -318,56 +286,55 @@ </span><span class="cx"> self.data = data </span><span class="cx"> def __repr__(self): </span><span class="cx"> return "Foo id %d, data %s" % (self.id, self.data) </span><del>- Foo.mapper = mapper(Foo, foo) </del><ins>+ mapper(Foo, foo) </ins><span class="cx"> </span><span class="cx"> class Bar(Foo): </span><span class="cx"> def __repr__(self): </span><span class="cx"> return "Bar id %d, data %s" % (self.id, self.data) </span><span class="cx"> </span><del>- Bar.mapper = mapper(Bar, bar, inherits=Foo.mapper) </del><ins>+ mapper(Bar, bar, inherits=Foo) </ins><span class="cx"> </span><span class="cx"> class Blub(Bar): </span><span class="cx"> def __repr__(self): </span><span class="cx"> return "Blub id %d, data %s" % (self.id, self.data) </span><span class="cx"> </span><del>- Blub.mapper = mapper(Blub, blub, inherits=Bar.mapper, properties={ - # bug was raised specifically based on the order of cols in the join.... -# 'parent_foo':relation(Foo.mapper, primaryjoin=blub.c.foo_id==foo.c.id) -# 'parent_foo':relation(Foo.mapper, primaryjoin=foo.c.id==blub.c.foo_id) - 'parent_foo':relation(Foo.mapper) </del><ins>+ mapper(Blub, blub, inherits=Bar, properties={ + 'parent_foo':relation(Foo) </ins><span class="cx"> }) </span><span class="cx"> </span><del>- b1 = Blub("blub #1") - b2 = Blub("blub #2") - f = Foo("foo #1") </del><ins>+ sess = create_session() + b1 = Blub("blub #1", _sa_session=sess) + b2 = Blub("blub #2", _sa_session=sess) + f = Foo("foo #1", _sa_session=sess) </ins><span class="cx"> b1.parent_foo = f </span><span class="cx"> b2.parent_foo = f </span><del>- objectstore.flush() </del><ins>+ sess.flush() </ins><span class="cx"> compare = repr(b1) + repr(b2) + repr(b1.parent_foo) + repr(b2.parent_foo) </span><del>- objectstore.clear() - l = Blub.mapper.select() </del><ins>+ sess.clear() + l = sess.query(Blub).select() </ins><span class="cx"> result = repr(l[0]) + repr(l[1]) + repr(l[0].parent_foo) + repr(l[1].parent_foo) </span><span class="cx"> self.echo(result) </span><span class="cx"> self.assert_(compare == result) </span><span class="cx"> self.assert_(l[0].parent_foo.data == 'foo #1' and l[1].parent_foo.data == 'foo #1') </span><span class="cx"> </span><del>-class InheritTest5(testbase.AssertMixin): </del><ins>+class InheritTest5(testbase.AssertMixin): + """testing that construction of inheriting mappers works regardless of when extra properties + are added to the superclass mapper""" </ins><span class="cx"> def setUpAll(self): </span><del>- engine = testbase.metadata - global content_type, content, product - content_type = Table('content_type', engine, </del><ins>+ global content_type, content, product, metadata + metadata = BoundMetaData(testbase.db) + content_type = Table('content_type', metadata, </ins><span class="cx"> Column('id', Integer, primary_key=True) </span><span class="cx"> ) </span><del>- content = Table('content', engine, </del><ins>+ content = Table('content', metadata, </ins><span class="cx"> Column('id', Integer, primary_key=True), </span><span class="cx"> Column('content_type_id', Integer, ForeignKey('content_type.id')) </span><span class="cx"> ) </span><del>- product = Table('product', engine, </del><ins>+ product = Table('product', metadata, </ins><span class="cx"> Column('id', Integer, ForeignKey('content.id'), primary_key=True) </span><span class="cx"> ) </span><span class="cx"> def tearDownAll(self): </span><del>- testbase.metadata.tables.clear() - </del><ins>+ pass </ins><span class="cx"> def tearDown(self): </span><span class="cx"> pass </span><span class="cx"> </span><span class="lines">@@ -385,12 +352,11 @@ </span><span class="cx"> products = mapper(Product, product, inherits=contents) </span><span class="cx"> </span><span class="cx"> def testbackref(self): </span><del>- """this test is currently known to fail in the 0.1 series of SQLAlchemy, pending the resolution of [ticket:154]""" </del><ins>+ """tests adding a property to the superclass mapper""" </ins><span class="cx"> class ContentType(object): pass </span><span class="cx"> class Content(object): pass </span><span class="cx"> class Product(Content): pass </span><span class="cx"> </span><del>- # this test fails currently </del><span class="cx"> contents = mapper(Content, content) </span><span class="cx"> products = mapper(Product, product, inherits=contents) </span><span class="cx"> content_types = mapper(ContentType, content_type, properties={ </span><span class="lines">@@ -403,20 +369,20 @@ </span><span class="cx"> """tests eager load/lazy load of child items off inheritance mappers, tests that </span><span class="cx"> LazyLoader constructs the right query condition.""" </span><span class="cx"> def setUpAll(self): </span><del>- global foo, bar, bar_foo - foo = Table('foo', testbase.metadata, Column('id', Integer, Sequence('foo_seq'), primary_key=True), - Column('data', String(30))).create() - bar = Table('bar', testbase.metadata, Column('id', Integer, ForeignKey('foo.id'), primary_key=True), - Column('data', String(30))).create() </del><ins>+ global foo, bar, bar_foo, metadata + metadata=BoundMetaData(testbase.db) + foo = Table('foo', metadata, Column('id', Integer, Sequence('foo_seq'), primary_key=True), + Column('data', String(30))) + bar = Table('bar', metadata, Column('id', Integer, ForeignKey('foo.id'), primary_key=True), + Column('data', String(30))) </ins><span class="cx"> </span><del>- bar_foo = Table('bar_foo', testbase.metadata, </del><ins>+ bar_foo = Table('bar_foo', metadata, </ins><span class="cx"> Column('bar_id', Integer, ForeignKey('bar.id')), </span><span class="cx"> Column('foo_id', Integer, ForeignKey('foo.id')) </span><del>- ).create() </del><ins>+ ) + metadata.create_all() </ins><span class="cx"> def tearDownAll(self): </span><del>- bar_foo.drop() - bar.drop() - foo.drop() </del><ins>+ metadata.drop_all() </ins><span class="cx"> </span><span class="cx"> def testbasic(self): </span><span class="cx"> class Foo(object): pass </span><span class="lines">@@ -439,9 +405,11 @@ </span><span class="cx"> </span><span class="cx"> bar_foo.insert().execute(bar_id=1, foo_id=3) </span><span class="cx"> bar_foo.insert().execute(bar_id=2, foo_id=4) </span><del>- - self.assert_(len(bars.selectfirst().lazy) == 1) - self.assert_(len(bars.selectfirst().eager) == 1) </del><ins>+ + sess = create_session() + q = sess.query(Bar) + self.assert_(len(q.selectfirst().lazy) == 1) + self.assert_(len(q.selectfirst().eager) == 1) </ins><span class="cx"> </span><span class="cx"> if __name__ == "__main__": </span><span class="cx"> testbase.main() </span></span></pre> </div> </div> </body> </html> |