[Sqlalchemy-commits] [1478] sqlalchemy/branches/schema/test: got 'alltests' to run minus oracle
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-05-21 16:48:32
|
<!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>[1478] sqlalchemy/branches/schema/test: got 'alltests' to run minus oracle</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1478</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-05-21 11:48:14 -0500 (Sun, 21 May 2006)</dd> </dl> <h3>Log Message</h3> <pre>got 'alltests' to run minus oracle</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemybranchesschemadocbuildcontentsqlconstructiontxt">sqlalchemy/branches/schema/doc/build/content/sqlconstruction.txt</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyenginebasepy">sqlalchemy/branches/schema/lib/sqlalchemy/engine/base.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyormmapperpy">sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemysqlpy">sqlalchemy/branches/schema/lib/sqlalchemy/sql.py</a></li> <li><a href="#sqlalchemybranchesschematestentitypy">sqlalchemy/branches/schema/test/entity.py</a></li> <li><a href="#sqlalchemybranchesschematestindexespy">sqlalchemy/branches/schema/test/indexes.py</a></li> <li><a href="#sqlalchemybranchesschematestlazytest1py">sqlalchemy/branches/schema/test/lazytest1.py</a></li> <li><a href="#sqlalchemybranchesschematestobjectstorepy">sqlalchemy/branches/schema/test/objectstore.py</a></li> <li><a href="#sqlalchemybranchesschematestproxy_enginepy">sqlalchemy/branches/schema/test/proxy_engine.py</a></li> <li><a href="#sqlalchemybranchesschematestselectpy">sqlalchemy/branches/schema/test/select.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemybranchesschemadocbuildcontentsqlconstructiontxt"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/doc/build/content/sqlconstruction.txt (1477 => 1478)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/doc/build/content/sqlconstruction.txt 2006-05-20 18:52:13 UTC (rev 1477) +++ sqlalchemy/branches/schema/doc/build/content/sqlconstruction.txt 2006-05-21 16:48:14 UTC (rev 1478) </span><span class="lines">@@ -695,7 +695,8 @@ </span><span class="cx"> </span><span class="cx"> The sql package tries to allow free textual placement in as many ways as possible. In the examples below, note that the from_obj parameter is used only when no other information exists within the select object with which to determine table metadata. Also note that in a query where there isnt even table metadata used, the SQLEngine to be used for the query has to be explicitly specified: </span><span class="cx"> </span><del>- {python}# strings as column clauses </del><ins>+ {python} + # strings as column clauses </ins><span class="cx"> {sql}select(["user_id", "user_name"], from_obj=[users]).execute() </span><span class="cx"> SELECT user_id, user_name FROM users </span><span class="cx"> {} </span><span class="lines">@@ -736,19 +737,9 @@ </span><span class="cx"> </span><span class="cx"> # a full query </span><span class="cx"> {sql}text("select user_name from users", engine=db).execute() </span><del>- select user_name from users </del><ins>+ SELECT user_name FROM users </ins><span class="cx"> {} </span><span class="cx"> </span><del>- # or call text() off of the engine - engine.text("select user_name from users").execute() - - # execute off the engine directly - you must use the engine's native bind parameter - # style (i.e. named, pyformat, positional, etc.) - {sql}db.execute( - "select user_name from users where user_id=:user_id", - {'user_id':7}).execute() - select user_name from users where user_id=:user_id - {'user_id':7} </del><span class="cx"> </span><span class="cx"> #### Using Bind Parameters in Text Blocks {@name=textual_binds} </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyenginebasepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/engine/base.py (1477 => 1478)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/engine/base.py 2006-05-20 18:52:13 UTC (rev 1477) +++ sqlalchemy/branches/schema/lib/sqlalchemy/engine/base.py 2006-05-21 16:48:14 UTC (rev 1478) </span><span class="lines">@@ -539,7 +539,6 @@ </span><span class="cx"> try: </span><span class="cx"> rec = self.props[key._label.lower()] </span><span class="cx"> except KeyError: </span><del>- print "DIDNT HAVE", key._label.lower() </del><span class="cx"> try: </span><span class="cx"> rec = self.props[key.key.lower()] </span><span class="cx"> except KeyError: </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyormmapperpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py (1477 => 1478)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py 2006-05-20 18:52:13 UTC (rev 1477) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py 2006-05-21 16:48:14 UTC (rev 1478) </span><span class="lines">@@ -56,7 +56,10 @@ </span><span class="cx"> ext = MapperExtension() </span><span class="cx"> </span><span class="cx"> for ext_class in global_extensions: </span><del>- ext = ext_class().chain(ext) </del><ins>+ if isinstance(ext_class, MapperExtension): + ext = ext_class.chain(ext) + else: + ext = ext_class().chain(ext) </ins><span class="cx"> </span><span class="cx"> if extension is not None: </span><span class="cx"> for ext_obj in util.to_list(extension): </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemysqlpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/sql.py (1477 => 1478)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/sql.py 2006-05-20 18:52:13 UTC (rev 1477) +++ sqlalchemy/branches/schema/lib/sqlalchemy/sql.py 2006-05-21 16:48:14 UTC (rev 1478) </span><span class="lines">@@ -1157,10 +1157,10 @@ </span><span class="cx"> if self.__label is None: </span><span class="cx"> if self.table is not None and self.table.named_with_column(): </span><span class="cx"> self.__label = self.table.name + "_" + self.name </span><ins>+ if self.table.c.has_key(self.__label) or len(self.__label) >= 30: + self.__label = self.__label[0:24] + "_" + hex(random.randint(0, 65535))[2:] </ins><span class="cx"> else: </span><span class="cx"> self.__label = self.name </span><del>- if (self.table is not None and self.table.c.has_key(self.__label)) or len(self.__label) >= 30: - self.__label = self.__label[0:24] + "_" + hex(random.randint(0, 65535))[2:] </del><span class="cx"> return self.__label </span><span class="cx"> _label = property(_get_label) </span><span class="cx"> def accept_visitor(self, visitor): </span></span></pre></div> <a id="sqlalchemybranchesschematestentitypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/entity.py (1477 => 1478)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/entity.py 2006-05-20 18:52:13 UTC (rev 1477) +++ sqlalchemy/branches/schema/test/entity.py 2006-05-21 16:48:14 UTC (rev 1478) </span><span class="lines">@@ -2,6 +2,7 @@ </span><span class="cx"> import unittest </span><span class="cx"> from sqlalchemy import * </span><span class="cx"> import testbase </span><ins>+from sqlalchemy.ext.sessioncontext import SessionContext </ins><span class="cx"> </span><span class="cx"> from tables import * </span><span class="cx"> import tables </span><span class="lines">@@ -10,38 +11,35 @@ </span><span class="cx"> """tests mappers that are constructed based on "entity names", which allows the same class </span><span class="cx"> to have multiple primary mappers """ </span><span class="cx"> def setUpAll(self): </span><del>- global user1, user2, address1, address2 - db = testbase.db - user1 = Table('user1', db, </del><ins>+ global user1, user2, address1, address2, metadata, ctx + metadata = BoundMetaData(testbase.db) + ctx = SessionContext(create_session) + + user1 = Table('user1', metadata, </ins><span class="cx"> Column('user_id', Integer, Sequence('user1_id_seq'), primary_key=True), </span><span class="cx"> Column('name', String(60), nullable=False) </span><del>- ).create() - user2 = Table('user2', db, </del><ins>+ ) + user2 = Table('user2', metadata, </ins><span class="cx"> Column('user_id', Integer, Sequence('user2_id_seq'), primary_key=True), </span><span class="cx"> Column('name', String(60), nullable=False) </span><del>- ).create() - address1 = Table('address1', db, </del><ins>+ ) + address1 = Table('address1', metadata, </ins><span class="cx"> Column('address_id', Integer, Sequence('address1_id_seq'), primary_key=True), </span><span class="cx"> Column('user_id', Integer, ForeignKey(user1.c.user_id), nullable=False), </span><span class="cx"> Column('email', String(100), nullable=False) </span><del>- ).create() - address2 = Table('address2', db, </del><ins>+ ) + address2 = Table('address2', metadata, </ins><span class="cx"> Column('address_id', Integer, Sequence('address2_id_seq'), primary_key=True), </span><span class="cx"> Column('user_id', Integer, ForeignKey(user2.c.user_id), nullable=False), </span><span class="cx"> Column('email', String(100), nullable=False) </span><del>- ).create() </del><ins>+ ) + metadata.create_all() </ins><span class="cx"> def tearDownAll(self): </span><del>- address1.drop() - address2.drop() - user1.drop() - user2.drop() </del><ins>+ metadata.drop_all() </ins><span class="cx"> def tearDown(self): </span><del>- address1.delete().execute() - address2.delete().execute() - user1.delete().execute() - user2.delete().execute() - objectstore.clear() </del><span class="cx"> clear_mappers() </span><ins>+ for t in metadata.table_iterator(reverse=True): + t.delete().execute() </ins><span class="cx"> </span><span class="cx"> def testbasic(self): </span><span class="cx"> """tests a pair of one-to-many mapper structures, establishing that both </span><span class="lines">@@ -50,14 +48,14 @@ </span><span class="cx"> class User(object):pass </span><span class="cx"> class Address(object):pass </span><span class="cx"> </span><del>- a1mapper = mapper(Address, address1, entity_name='address1') - a2mapper = mapper(Address, address2, entity_name='address2') </del><ins>+ a1mapper = mapper(Address, address1, entity_name='address1', extension=ctx.mapper_extension) + a2mapper = mapper(Address, address2, entity_name='address2', extension=ctx.mapper_extension) </ins><span class="cx"> u1mapper = mapper(User, user1, entity_name='user1', properties ={ </span><span class="cx"> 'addresses':relation(a1mapper) </span><del>- }) </del><ins>+ }, extension=ctx.mapper_extension) </ins><span class="cx"> u2mapper =mapper(User, user2, entity_name='user2', properties={ </span><span class="cx"> 'addresses':relation(a2mapper) </span><del>- }) </del><ins>+ }, extension=ctx.mapper_extension) </ins><span class="cx"> </span><span class="cx"> u1 = User(_sa_entity_name='user1') </span><span class="cx"> u1.name = 'this is user 1' </span><span class="lines">@@ -71,15 +69,15 @@ </span><span class="cx"> a2.email='a2...@fo...' </span><span class="cx"> u2.addresses.append(a2) </span><span class="cx"> </span><del>- objectstore.commit() </del><ins>+ ctx.current.flush() </ins><span class="cx"> assert user1.select().execute().fetchall() == [(u1.user_id, u1.name)] </span><span class="cx"> assert user2.select().execute().fetchall() == [(u2.user_id, u2.name)] </span><span class="cx"> assert address1.select().execute().fetchall() == [(u1.user_id, a1.user_id, 'a1...@fo...')] </span><span class="cx"> assert address2.select().execute().fetchall() == [(u2.user_id, a2.user_id, 'a2...@fo...')] </span><span class="cx"> </span><del>- objectstore.clear() - u1list = u1mapper.select() - u2list = u2mapper.select() </del><ins>+ ctx.current.clear() + u1list = ctx.current.query(User, entity_name='user1').select() + u2list = ctx.current.query(User, entity_name='user2').select() </ins><span class="cx"> assert len(u1list) == len(u2list) == 1 </span><span class="cx"> assert u1list[0] is not u2list[0] </span><span class="cx"> assert len(u1list[0].addresses) == len(u2list[0].addresses) == 1 </span><span class="lines">@@ -90,14 +88,14 @@ </span><span class="cx"> class Address1(object):pass </span><span class="cx"> class Address2(object):pass </span><span class="cx"> </span><del>- a1mapper = mapper(Address1, address1) - a2mapper = mapper(Address2, address2) </del><ins>+ a1mapper = mapper(Address1, address1, extension=ctx.mapper_extension) + a2mapper = mapper(Address2, address2, extension=ctx.mapper_extension) </ins><span class="cx"> u1mapper = mapper(User, user1, entity_name='user1', properties ={ </span><span class="cx"> 'addresses':relation(a1mapper) </span><del>- }) </del><ins>+ }, extension=ctx.mapper_extension) </ins><span class="cx"> u2mapper =mapper(User, user2, entity_name='user2', properties={ </span><span class="cx"> 'addresses':relation(a2mapper) </span><del>- }) </del><ins>+ }, extension=ctx.mapper_extension) </ins><span class="cx"> </span><span class="cx"> u1 = User(_sa_entity_name='user1') </span><span class="cx"> u1.name = 'this is user 1' </span><span class="lines">@@ -111,15 +109,15 @@ </span><span class="cx"> a2.email='a2...@fo...' </span><span class="cx"> u2.addresses.append(a2) </span><span class="cx"> </span><del>- objectstore.commit() </del><ins>+ ctx.current.flush() </ins><span class="cx"> assert user1.select().execute().fetchall() == [(u1.user_id, u1.name)] </span><span class="cx"> assert user2.select().execute().fetchall() == [(u2.user_id, u2.name)] </span><span class="cx"> assert address1.select().execute().fetchall() == [(u1.user_id, a1.user_id, 'a1...@fo...')] </span><span class="cx"> assert address2.select().execute().fetchall() == [(u2.user_id, a2.user_id, 'a2...@fo...')] </span><span class="cx"> </span><del>- objectstore.clear() - u1list = u1mapper.select() - u2list = u2mapper.select() </del><ins>+ ctx.current.clear() + u1list = ctx.current.query(User, entity_name='user1').select() + u2list = ctx.current.query(User, entity_name='user2').select() </ins><span class="cx"> assert len(u1list) == len(u2list) == 1 </span><span class="cx"> assert u1list[0] is not u2list[0] </span><span class="cx"> assert len(u1list[0].addresses) == len(u2list[0].addresses) == 1 </span></span></pre></div> <a id="sqlalchemybranchesschematestindexespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/indexes.py (1477 => 1478)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/indexes.py 2006-05-20 18:52:13 UTC (rev 1477) +++ sqlalchemy/branches/schema/test/indexes.py 2006-05-21 16:48:14 UTC (rev 1478) </span><span class="lines">@@ -101,15 +101,15 @@ </span><span class="cx"> sport='hockey', announcer='some canadian', </span><span class="cx"> winner='sweden') </span><span class="cx"> ss = events.select().execute().fetchall() </span><del>- </del><ins>+ </ins><span class="cx"> assert capt[0].strip().startswith('CREATE TABLE events') </span><del>- assert capt[2].strip() == \ </del><ins>+ assert capt[3].strip() == \ </ins><span class="cx"> 'CREATE UNIQUE INDEX ux_name ON events (name)' </span><del>- assert capt[4].strip() == \ </del><ins>+ assert capt[6].strip() == \ </ins><span class="cx"> 'CREATE INDEX ix_location ON events (location)' </span><del>- assert capt[6].strip() == \ </del><ins>+ assert capt[9].strip() == \ </ins><span class="cx"> 'CREATE UNIQUE INDEX sport_announcer ON events (sport, announcer)' </span><del>- assert capt[8].strip() == \ </del><ins>+ assert capt[12].strip() == \ </ins><span class="cx"> 'CREATE INDEX idx_winners ON events (winner)' </span><span class="cx"> </span><span class="cx"> if __name__ == "__main__": </span></span></pre></div> <a id="sqlalchemybranchesschematestlazytest1py"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/lazytest1.py (1477 => 1478)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/lazytest1.py 2006-05-20 18:52:13 UTC (rev 1477) +++ sqlalchemy/branches/schema/test/lazytest1.py 2006-05-21 16:48:14 UTC (rev 1478) </span><span class="lines">@@ -6,28 +6,25 @@ </span><span class="cx"> </span><span class="cx"> class LazyTest(AssertMixin): </span><span class="cx"> def setUpAll(self): </span><del>- global info_table, data_table, rel_table - engine = testbase.db - info_table = Table('infos', engine, </del><ins>+ global info_table, data_table, rel_table, metadata + metadata = BoundMetaData(testbase.db) + info_table = Table('infos', metadata, </ins><span class="cx"> Column('pk', Integer, primary_key=True), </span><span class="cx"> Column('info', String)) </span><span class="cx"> </span><del>- data_table = Table('data', engine, </del><ins>+ data_table = Table('data', metadata, </ins><span class="cx"> Column('data_pk', Integer, primary_key=True), </span><span class="cx"> Column('info_pk', Integer, ForeignKey(info_table.c.pk)), </span><span class="cx"> Column('timeval', Integer), </span><span class="cx"> Column('data_val', String)) </span><span class="cx"> </span><del>- rel_table = Table('rels', engine, </del><ins>+ rel_table = Table('rels', metadata, </ins><span class="cx"> Column('rel_pk', Integer, primary_key=True), </span><span class="cx"> Column('info_pk', Integer, ForeignKey(info_table.c.pk)), </span><span class="cx"> Column('start', Integer), </span><span class="cx"> Column('finish', Integer)) </span><span class="cx"> </span><del>- - info_table.create() - rel_table.create() - data_table.create() </del><ins>+ metadata.create_all() </ins><span class="cx"> info_table.insert().execute( </span><span class="cx"> {'pk':1, 'info':'pk_1_info'}, </span><span class="cx"> {'pk':2, 'info':'pk_2_info'}, </span><span class="lines">@@ -52,9 +49,7 @@ </span><span class="cx"> </span><span class="cx"> </span><span class="cx"> def tearDownAll(self): </span><del>- data_table.drop() - rel_table.drop() - info_table.drop() </del><ins>+ metadata.drop_all() </ins><span class="cx"> </span><span class="cx"> def testone(self): </span><span class="cx"> """tests a lazy load which has multiple join conditions, including two that are against </span><span class="lines">@@ -70,19 +65,21 @@ </span><span class="cx"> </span><span class="cx"> session = create_session() </span><span class="cx"> </span><del>- # Create the basic mappers, with no frills or modifications - Information.mapper = mapper(Information, info_table) - Data.mapper = mapper(Data, data_table) - Relation.mapper = mapper(Relation, rel_table) </del><ins>+ mapper(Data, data_table) + mapper(Relation, rel_table, properties={ + + 'datas': relation(Data, + primaryjoin=and_(rel_table.c.info_pk==Data.c.info_pk, + Data.c.timeval >= rel_table.c.start, + Data.c.timeval <= rel_table.c.finish), + foreignkey=Data.c.info_pk) + } + + ) + mapper(Information, info_table, properties={ + 'rels': relation(Relation) + }) </ins><span class="cx"> </span><del>- Relation.mapper.add_property('datas', relation(Data.mapper, - primaryjoin=and_(Relation.c.info_pk==Data.c.info_pk, - Data.c.timeval >= Relation.c.start, - Data.c.timeval <= Relation.c.finish), - foreignkey=Data.c.info_pk)) - - Information.mapper.add_property('rels', relation(Relation.mapper)) - </del><span class="cx"> info = session.query(Information).get(1) </span><span class="cx"> assert info </span><span class="cx"> assert len(info.rels) == 2 </span></span></pre></div> <a id="sqlalchemybranchesschematestobjectstorepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/objectstore.py (1477 => 1478)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/objectstore.py 2006-05-20 18:52:13 UTC (rev 1477) +++ sqlalchemy/branches/schema/test/objectstore.py 2006-05-21 16:48:14 UTC (rev 1478) </span><span class="lines">@@ -3,13 +3,26 @@ </span><span class="cx"> from sqlalchemy import * </span><span class="cx"> import StringIO </span><span class="cx"> import testbase </span><ins>+from sqlalchemy.orm.mapper import global_extensions +from sqlalchemy.ext.sessioncontext import SessionContext </ins><span class="cx"> </span><span class="cx"> from tables import * </span><span class="cx"> import tables </span><span class="cx"> </span><del>-class HistoryTest(AssertMixin): </del><ins>+class SessionTest(AssertMixin): </ins><span class="cx"> def setUpAll(self): </span><del>- self.install_threadlocal() </del><ins>+ global ctx + ctx = SessionContext(create_session) + global_extensions.append(ctx.mapper_extension) + def tearDownAll(self): + global_extensions.remove(ctx.mapper_extension) + def tearDown(self): + ctx.current.clear() + clear_mappers() + +class HistoryTest(SessionTest): + def setUpAll(self): + SessionTest.setUpAll(self) </ins><span class="cx"> db.echo = False </span><span class="cx"> users.create() </span><span class="cx"> addresses.create() </span><span class="lines">@@ -19,10 +32,7 @@ </span><span class="cx"> addresses.drop() </span><span class="cx"> users.drop() </span><span class="cx"> db.echo = testbase.echo </span><del>- self.uninstall_threadlocal() - def setUp(self): - objectstore.clear() - clear_mappers() </del><ins>+ SessionTest.tearDownAll(self) </ins><span class="cx"> </span><span class="cx"> def testattr(self): </span><span class="cx"> """tests the rolling back of scalar and list attributes. this kind of thing </span><span class="lines">@@ -45,7 +55,7 @@ </span><span class="cx"> self.assert_result([u], data[0], *data[1:]) </span><span class="cx"> </span><span class="cx"> self.echo(repr(u.addresses)) </span><del>- objectstore.get_session().uow.rollback_object(u) </del><ins>+ ctx.current.uow.rollback_object(u) </ins><span class="cx"> data = [User, </span><span class="cx"> {'user_name' : None, </span><span class="cx"> 'addresses' : (Address, []) </span><span class="lines">@@ -62,10 +72,8 @@ </span><span class="cx"> addresses = relation(am, backref='user', lazy=False)) </span><span class="cx"> ) </span><span class="cx"> </span><del>- u = User() - a = Address() - s.save(u) - s.save(a) </del><ins>+ u = User(_sa_session=s) + a = Address(_sa_session=s) </ins><span class="cx"> a.user = u </span><span class="cx"> #print repr(a.__class__._attribute_manager.get_history(a, 'user').added_items()) </span><span class="cx"> #print repr(u.addresses.added_items()) </span><span class="lines">@@ -77,10 +85,10 @@ </span><span class="cx"> print u.addresses[0].user </span><span class="cx"> </span><span class="cx"> </span><del>-class VersioningTest(AssertMixin): </del><ins>+class VersioningTest(SessionTest): </ins><span class="cx"> def setUpAll(self): </span><del>- self.install_threadlocal() - objectstore.clear() </del><ins>+ SessionTest.setUpAll(self) + ctx.current.clear() </ins><span class="cx"> global version_table </span><span class="cx"> version_table = Table('version_test', db, </span><span class="cx"> Column('id', Integer, primary_key=True), </span><span class="lines">@@ -89,11 +97,10 @@ </span><span class="cx"> ).create() </span><span class="cx"> def tearDownAll(self): </span><span class="cx"> version_table.drop() </span><del>- self.uninstall_threadlocal() </del><ins>+ SessionTest.tearDownAll(self) </ins><span class="cx"> def tearDown(self): </span><span class="cx"> version_table.delete().execute() </span><del>- objectstore.clear() - clear_mappers() </del><ins>+ SessionTest.tearDown(self) </ins><span class="cx"> </span><span class="cx"> @testbase.unsupported('mysql') </span><span class="cx"> def testbasic(self): </span><span class="lines">@@ -138,10 +145,9 @@ </span><span class="cx"> success = True </span><span class="cx"> assert success </span><span class="cx"> </span><del>-class UnicodeTest(AssertMixin): </del><ins>+class UnicodeTest(SessionTest): </ins><span class="cx"> def setUpAll(self): </span><del>- self.install_threadlocal() - objectstore.clear() </del><ins>+ SessionTest.setUpAll(self) </ins><span class="cx"> global uni_table </span><span class="cx"> uni_table = Table('uni_test', db, </span><span class="cx"> Column('id', Integer, primary_key=True), </span><span class="lines">@@ -149,8 +155,7 @@ </span><span class="cx"> </span><span class="cx"> def tearDownAll(self): </span><span class="cx"> uni_table.drop() </span><del>- uni_table.deregister() - self.uninstall_threadlocal() </del><ins>+ SessionTest.tearDownAll(self) </ins><span class="cx"> </span><span class="cx"> def testbasic(self): </span><span class="cx"> class Test(object): </span><span class="lines">@@ -162,13 +167,13 @@ </span><span class="cx"> txt = u"\u0160\u0110\u0106\u010c\u017d" </span><span class="cx"> t1 = Test(id=1, txt = txt) </span><span class="cx"> self.assert_(t1.txt == txt) </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> self.assert_(t1.txt == txt) </span><span class="cx"> </span><span class="cx"> </span><del>-class PKTest(AssertMixin): </del><ins>+class PKTest(SessionTest): </ins><span class="cx"> def setUpAll(self): </span><del>- self.install_threadlocal() </del><ins>+ SessionTest.setUpAll(self) </ins><span class="cx"> db.echo = False </span><span class="cx"> global table </span><span class="cx"> global table2 </span><span class="lines">@@ -202,10 +207,7 @@ </span><span class="cx"> table2.drop() </span><span class="cx"> table3.drop() </span><span class="cx"> db.echo = testbase.echo </span><del>- self.uninstall_threadlocal() - def setUp(self): - objectstore.clear() - clear_mappers() </del><ins>+ SessionTest.tearDownAll(self) </ins><span class="cx"> </span><span class="cx"> @testbase.unsupported('sqlite') </span><span class="cx"> def testprimarykey(self): </span><span class="lines">@@ -216,8 +218,8 @@ </span><span class="cx"> e.name = 'entry1' </span><span class="cx"> e.value = 'this is entry 1' </span><span class="cx"> e.multi_rev = 2 </span><del>- objectstore.flush() - objectstore.clear() </del><ins>+ ctx.current.flush() + ctx.current.clear() </ins><span class="cx"> e2 = Entry.mapper.get((e.multi_id, 2)) </span><span class="cx"> self.assert_(e is not e2 and e._instance_key == e2._instance_key) </span><span class="cx"> def testmanualpk(self): </span><span class="lines">@@ -228,7 +230,7 @@ </span><span class="cx"> e.pk_col_1 = 'pk1' </span><span class="cx"> e.pk_col_2 = 'pk1_related' </span><span class="cx"> e.data = 'im the data' </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> def testkeypks(self): </span><span class="cx"> import datetime </span><span class="cx"> class Entity(object): </span><span class="lines">@@ -239,12 +241,12 @@ </span><span class="cx"> e.secondary = 'pk2' </span><span class="cx"> e.assigned = datetime.date.today() </span><span class="cx"> e.data = 'some more data' </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><del>-class PrivateAttrTest(AssertMixin): </del><ins>+class PrivateAttrTest(SessionTest): </ins><span class="cx"> """tests various things to do with private=True mappers""" </span><span class="cx"> def setUpAll(self): </span><del>- self.install_threadlocal() </del><ins>+ SessionTest.setUpAll(self) </ins><span class="cx"> global a_table, b_table </span><span class="cx"> a_table = Table('a',testbase.db, </span><span class="cx"> Column('a_id', Integer, Sequence('next_a_id'), primary_key=True), </span><span class="lines">@@ -258,10 +260,7 @@ </span><span class="cx"> def tearDownAll(self): </span><span class="cx"> b_table.drop() </span><span class="cx"> a_table.drop() </span><del>- self.uninstall_threadlocal() - def setUp(self): - objectstore.clear() - clear_mappers() </del><ins>+ SessionTest.tearDownAll(self) </ins><span class="cx"> </span><span class="cx"> def testsinglecommit(self): </span><span class="cx"> """tests that a commit of a single object deletes private relationships""" </span><span class="lines">@@ -284,10 +283,10 @@ </span><span class="cx"> a.bs.append(b2) </span><span class="cx"> </span><span class="cx"> # inserts both A and Bs </span><del>- objectstore.flush([a]) </del><ins>+ ctx.current.flush([a]) </ins><span class="cx"> </span><del>- objectstore.delete(a) - objectstore.flush([a]) </del><ins>+ ctx.current.delete(a) + ctx.current.flush([a]) </ins><span class="cx"> </span><span class="cx"> assert b_table.count().scalar() == 0 </span><span class="cx"> </span><span class="lines">@@ -304,24 +303,24 @@ </span><span class="cx"> a2 = A(data='testa2') </span><span class="cx"> b = B(data='testb') </span><span class="cx"> b.a = a1 </span><del>- objectstore.flush() - objectstore.clear() - sess = objectstore.get_session() </del><ins>+ ctx.current.flush() + ctx.current.clear() + sess = ctx.current </ins><span class="cx"> a1 = A.mapper.get(a1.a_id) </span><span class="cx"> a2 = A.mapper.get(a2.a_id) </span><span class="cx"> assert a1.bs[0].a is a1 </span><span class="cx"> b = a1.bs[0] </span><span class="cx"> b.a = a2 </span><span class="cx"> assert b not in sess.deleted </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> assert b in sess.identity_map.values() </span><span class="cx"> </span><del>-class DefaultTest(AssertMixin): </del><ins>+class DefaultTest(SessionTest): </ins><span class="cx"> """tests that when saving objects whose table contains DefaultGenerators, either python-side, preexec or database-side, </span><span class="cx"> the newly saved instances receive all the default values either through a post-fetch or getting the pre-exec'ed </span><span class="cx"> defaults back from the engine.""" </span><span class="cx"> def setUpAll(self): </span><del>- self.install_threadlocal() </del><ins>+ SessionTest.setUpAll(self) </ins><span class="cx"> #db.echo = 'debug' </span><span class="cx"> use_string_defaults = db.engine.__module__.endswith('postgres') or db.engine.__module__.endswith('oracle') or db.engine.__module__.endswith('sqlite') </span><span class="cx"> </span><span class="lines">@@ -342,7 +341,7 @@ </span><span class="cx"> self.table.create() </span><span class="cx"> def tearDownAll(self): </span><span class="cx"> self.table.drop() </span><del>- self.uninstall_threadlocal() </del><ins>+ SessionTest.tearDownAll(self) </ins><span class="cx"> def setUp(self): </span><span class="cx"> self.table = Table('default_test', db) </span><span class="cx"> def testinsert(self): </span><span class="lines">@@ -353,7 +352,7 @@ </span><span class="cx"> h3 = Hoho(hoho=self.althohoval, counter=12) </span><span class="cx"> h4 = Hoho() </span><span class="cx"> h5 = Hoho(foober='im the new foober') </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> self.assert_(h1.hoho==self.althohoval) </span><span class="cx"> self.assert_(h3.hoho==self.althohoval) </span><span class="cx"> self.assert_(h2.hoho==h4.hoho==h5.hoho==self.hohoval) </span><span class="lines">@@ -361,7 +360,7 @@ </span><span class="cx"> self.assert_(h1.counter == h4.counter==h5.counter==7) </span><span class="cx"> self.assert_(h2.foober == h3.foober == h4.foober == 'im foober') </span><span class="cx"> self.assert_(h5.foober=='im the new foober') </span><del>- objectstore.clear() </del><ins>+ ctx.current.clear() </ins><span class="cx"> l = Hoho.mapper.select() </span><span class="cx"> (h1, h2, h3, h4, h5) = l </span><span class="cx"> self.assert_(h1.hoho==self.althohoval) </span><span class="lines">@@ -377,7 +376,7 @@ </span><span class="cx"> class Hoho(object):pass </span><span class="cx"> assign_mapper(Hoho, self.table) </span><span class="cx"> h1 = Hoho(hoho="15", counter="15") </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> self.assert_(h1.hoho=="15") </span><span class="cx"> self.assert_(h1.counter=="15") </span><span class="cx"> self.assert_(h1.foober=="im foober") </span><span class="lines">@@ -386,16 +385,16 @@ </span><span class="cx"> class Hoho(object):pass </span><span class="cx"> assign_mapper(Hoho, self.table) </span><span class="cx"> h1 = Hoho() </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> self.assert_(h1.foober == 'im foober') </span><span class="cx"> h1.counter = 19 </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> self.assert_(h1.foober == 'im the update') </span><span class="cx"> </span><del>-class SaveTest(AssertMixin): </del><ins>+class SaveTest(SessionTest): </ins><span class="cx"> </span><span class="cx"> def setUpAll(self): </span><del>- self.install_threadlocal() </del><ins>+ SessionTest.setUpAll(self) </ins><span class="cx"> db.echo = False </span><span class="cx"> tables.create() </span><span class="cx"> db.echo = testbase.echo </span><span class="lines">@@ -403,14 +402,10 @@ </span><span class="cx"> db.echo = False </span><span class="cx"> tables.drop() </span><span class="cx"> db.echo = testbase.echo </span><del>- self.uninstall_threadlocal() </del><ins>+ SessionTest.tearDownAll(self) </ins><span class="cx"> </span><span class="cx"> def setUp(self): </span><span class="cx"> db.echo = False </span><del>- # remove all history/identity maps etc. - objectstore.clear() - # remove all mapperes - clear_mappers() </del><span class="cx"> keywords.insert().execute( </span><span class="cx"> dict(name='blue'), </span><span class="cx"> dict(name='red'), </span><span class="lines">@@ -427,9 +422,10 @@ </span><span class="cx"> tables.delete() </span><span class="cx"> db.echo = testbase.echo </span><span class="cx"> </span><del>- self.assert_(len(objectstore.get_session().new) == 0) - self.assert_(len(objectstore.get_session().dirty) == 0) - </del><ins>+ self.assert_(len(ctx.current.new) == 0) + self.assert_(len(ctx.current.dirty) == 0) + SessionTest.tearDown(self) + </ins><span class="cx"> def testbasic(self): </span><span class="cx"> # save two users </span><span class="cx"> u = User() </span><span class="lines">@@ -438,10 +434,10 @@ </span><span class="cx"> u2 = User() </span><span class="cx"> u2.user_name = 'savetester2' </span><span class="cx"> </span><del>- objectstore.get_session().save(u) </del><ins>+ ctx.current.save(u) </ins><span class="cx"> </span><del>- objectstore.get_session().flush([u]) - objectstore.get_session().flush() </del><ins>+ ctx.current.flush([u]) + ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> # assert the first one retreives the same from the identity map </span><span class="cx"> nu = m.get(u.user_id) </span><span class="lines">@@ -449,20 +445,20 @@ </span><span class="cx"> self.assert_(u is nu) </span><span class="cx"> </span><span class="cx"> # clear out the identity map, so next get forces a SELECT </span><del>- objectstore.clear() </del><ins>+ ctx.current.clear() </ins><span class="cx"> </span><span class="cx"> # check it again, identity should be different but ids the same </span><span class="cx"> nu = m.get(u.user_id) </span><span class="cx"> self.assert_(u is not nu and u.user_id == nu.user_id and nu.user_name == 'savetester') </span><span class="cx"> </span><span class="cx"> # change first users name and save </span><del>- objectstore.get_session().update(u) </del><ins>+ ctx.current.update(u) </ins><span class="cx"> u.user_name = 'modifiedname' </span><del>- assert u in objectstore.get_session().dirty - objectstore.get_session().flush() </del><ins>+ assert u in ctx.current.dirty + ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> # select both </span><del>- #objectstore.clear() </del><ins>+ #ctx.current.clear() </ins><span class="cx"> userlist = m.select(users.c.user_id.in_(u.user_id, u2.user_id), order_by=[users.c.user_name]) </span><span class="cx"> print repr(u.user_id), repr(userlist[0].user_id), repr(userlist[0].user_name) </span><span class="cx"> self.assert_(u.user_id == userlist[0].user_id and userlist[0].user_name == 'modifiedname') </span><span class="lines">@@ -480,12 +476,12 @@ </span><span class="cx"> u.addresses.append(Address()) </span><span class="cx"> u.addresses.append(Address()) </span><span class="cx"> u.addresses.append(Address()) </span><del>- objectstore.flush() - objectstore.clear() </del><ins>+ ctx.current.flush() + ctx.current.clear() </ins><span class="cx"> ulist = m1.select() </span><span class="cx"> u1 = ulist[0] </span><span class="cx"> u1.user_name = 'newname' </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> self.assert_(len(u1.addresses) == 4) </span><span class="cx"> </span><span class="cx"> def testinherits(self): </span><span class="lines">@@ -502,8 +498,8 @@ </span><span class="cx"> ) </span><span class="cx"> </span><span class="cx"> au = AddressUser() </span><del>- objectstore.flush() - objectstore.clear() </del><ins>+ ctx.current.flush() + ctx.current.clear() </ins><span class="cx"> l = AddressUser.mapper.selectone() </span><span class="cx"> self.assert_(l.user_id == au.user_id and l.address_id == au.address_id) </span><span class="cx"> </span><span class="lines">@@ -524,7 +520,7 @@ </span><span class="cx"> u.user_name = 'multitester' </span><span class="cx"> u.email = 'mu...@te...' </span><span class="cx"> </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> usertable = users.select(users.c.user_id.in_(u.foo_id)).execute().fetchall() </span><span class="cx"> self.assertEqual(usertable[0].values(), [u.foo_id, 'multitester']) </span><span class="lines">@@ -533,7 +529,7 @@ </span><span class="cx"> </span><span class="cx"> u.email = 'la...@he...' </span><span class="cx"> u.user_name = 'imnew' </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> usertable = users.select(users.c.user_id.in_(u.foo_id)).execute().fetchall() </span><span class="cx"> self.assertEqual(usertable[0].values(), [u.foo_id, 'imnew']) </span><span class="lines">@@ -551,11 +547,11 @@ </span><span class="cx"> u.user_name = 'one2onetester' </span><span class="cx"> u.address = Address() </span><span class="cx"> u.address.email_address = 'myo...@fo...' </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> u.user_name = 'imnew' </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> u.address.email_address = 'im...@fo...' </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> def testchildmove(self): </span><span class="cx"> """tests moving a child from one parent to the other, then deleting the first parent, properly </span><span class="lines">@@ -570,12 +566,12 @@ </span><span class="cx"> a = Address() </span><span class="cx"> a.email_address = 'address1' </span><span class="cx"> u1.addresses.append(a) </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> del u1.addresses[0] </span><span class="cx"> u2.addresses.append(a) </span><del>- objectstore.delete(u1) - objectstore.flush() - objectstore.clear() </del><ins>+ ctx.current.delete(u1) + ctx.current.flush() + ctx.current.clear() </ins><span class="cx"> u2 = m.get(u2.user_id) </span><span class="cx"> assert len(u2.addresses) == 1 </span><span class="cx"> </span><span class="lines">@@ -588,11 +584,11 @@ </span><span class="cx"> u.user_name = 'one2onetester' </span><span class="cx"> u.address = a </span><span class="cx"> u.address.email_address = 'myo...@fo...' </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> self.echo("\n\n\n") </span><del>- objectstore.get_session().delete(u) - objectstore.get_session().flush() - self.assert_(a.address_id is not None and a.user_id is None and not objectstore.get_session().identity_map.has_key(u._instance_key) and objectstore.get_session().identity_map.has_key(a._instance_key)) </del><ins>+ ctx.current.delete(u) + ctx.current.flush() + self.assert_(a.address_id is not None and a.user_id is None and not ctx.current.identity_map.has_key(u._instance_key) and ctx.current.identity_map.has_key(a._instance_key)) </ins><span class="cx"> </span><span class="cx"> def testcascadingdelete(self): </span><span class="cx"> m = mapper(User, users, properties = dict( </span><span class="lines">@@ -645,8 +641,8 @@ </span><span class="cx"> i.item_name = item['item_name'] </span><span class="cx"> o.items.append(i) </span><span class="cx"> </span><del>- objectstore.get_session().flush() - objectstore.clear() </del><ins>+ ctx.current.flush() + ctx.current.clear() </ins><span class="cx"> </span><span class="cx"> l = m.select() </span><span class="cx"> for u in l: </span><span class="lines">@@ -654,10 +650,10 @@ </span><span class="cx"> self.assert_result(l, data[0], *data[1:]) </span><span class="cx"> </span><span class="cx"> self.echo("\n\n\n") </span><del>- objectstore.get_session().delete(l[0], l[2]) - objectstore.flush() </del><ins>+ ctx.current.delete(l[0], l[2]) + ctx.current.flush() </ins><span class="cx"> return </span><del>- res = self.capture_exec(db, lambda: objectstore.get_session().flush()) </del><ins>+ res = self.capture_exec(db, lambda: ctx.current.flush()) </ins><span class="cx"> state = None </span><span class="cx"> </span><span class="cx"> for line in res.split('\n'): </span><span class="lines">@@ -695,11 +691,11 @@ </span><span class="cx"> a.user.user_name = elem['user_name'] </span><span class="cx"> objects.append(a) </span><span class="cx"> </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> objects[2].email_address = 'im...@fo...r' </span><span class="cx"> objects[3].user = User() </span><span class="cx"> objects[3].user.user_name = 'imnewlyadded' </span><del>- self.assert_sql(db, lambda: objectstore.get_session().flush(), [ </del><ins>+ self.assert_sql(db, lambda: ctx.current.flush(), [ </ins><span class="cx"> ( </span><span class="cx"> "INSERT INTO users (user_name) VALUES (:user_name)", </span><span class="cx"> {'user_name': 'imnewlyadded'} </span><span class="lines">@@ -750,7 +746,7 @@ </span><span class="cx"> u.addresses.append(a2) </span><span class="cx"> self.echo( repr(u.addresses)) </span><span class="cx"> self.echo( repr(u.addresses.added_items())) </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> usertable = users.select(users.c.user_id.in_(u.user_id)).execute().fetchall() </span><span class="cx"> self.assertEqual(usertable[0].values(), [u.user_id, 'one2manytester']) </span><span class="lines">@@ -763,7 +759,7 @@ </span><span class="cx"> </span><span class="cx"> a2.email_address = 'som...@fo...' </span><span class="cx"> </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> </span><span class="cx"> addresstable = addresses.select(addresses.c.address_id == addressid).execute().fetchall() </span><span class="lines">@@ -792,7 +788,7 @@ </span><span class="cx"> u[0].addresses[0].email_address='hi' </span><span class="cx"> </span><span class="cx"> # insure that upon commit, the new mapper with the address relation is used </span><del>- self.assert_sql(db, lambda: objectstore.flush(), </del><ins>+ self.assert_sql(db, lambda: ctx.current.flush(), </ins><span class="cx"> [ </span><span class="cx"> ( </span><span class="cx"> "INSERT INTO email_addresses (user_id, email_address) VALUES (:user_id, :email_address)", </span><span class="lines">@@ -829,7 +825,7 @@ </span><span class="cx"> a3 = Address() </span><span class="cx"> a3.email_address = 'emailaddress3' </span><span class="cx"> </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> self.echo("\n\n\n") </span><span class="cx"> # modify user2 directly, append an address to user1. </span><span class="lines">@@ -838,7 +834,7 @@ </span><span class="cx"> u2.user_name = 'user2modified' </span><span class="cx"> u1.addresses.append(a3) </span><span class="cx"> del u1.addresses[0] </span><del>- self.assert_sql(db, lambda: objectstore.flush(), </del><ins>+ self.assert_sql(db, lambda: ctx.current.flush(), </ins><span class="cx"> [ </span><span class="cx"> ( </span><span class="cx"> "UPDATE users SET user_name=:user_name WHERE users.user_id = :users_user_id", </span><span class="lines">@@ -863,12 +859,12 @@ </span><span class="cx"> u1.user_name='user1' </span><span class="cx"> </span><span class="cx"> a1.user = u1 </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> self.echo("\n\n\n") </span><del>- objectstore.delete(u1) </del><ins>+ ctx.current.delete(u1) </ins><span class="cx"> a1.user = None </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> def _testalias(self): </span><span class="cx"> """tests that an alias of a table can be used in a mapper. </span><span class="lines">@@ -947,7 +943,7 @@ </span><span class="cx"> k.name = kname </span><span class="cx"> item.keywords.append(k) </span><span class="cx"> </span><del>- objectstore.get_session().flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> l = m.select(items.c.item_name.in_(*[e['item_name'] for e in data[1:]]), order_by=[items.c.item_name, keywords.c.name]) </span><span class="cx"> self.assert_result(l, *data) </span><span class="lines">@@ -956,7 +952,7 @@ </span><span class="cx"> k = Keyword() </span><span class="cx"> k.name = 'yellow' </span><span class="cx"> objects[5].keywords.append(k) </span><del>- self.assert_sql(db, lambda:objectstore.flush(), [ </del><ins>+ self.assert_sql(db, lambda:ctx.current.flush(), [ </ins><span class="cx"> { </span><span class="cx"> "UPDATE items SET item_name=:item_name WHERE items.item_id = :items_item_id": </span><span class="cx"> {'item_name': 'item4updated', 'items_item_id': objects[4].item_id} </span><span class="lines">@@ -985,7 +981,7 @@ </span><span class="cx"> objects[2].keywords.append(k) </span><span class="cx"> dkid = objects[5].keywords[1].keyword_id </span><span class="cx"> del objects[5].keywords[1] </span><del>- self.assert_sql(db, lambda:objectstore.flush(), [ </del><ins>+ self.assert_sql(db, lambda:ctx.current.flush(), [ </ins><span class="cx"> ( </span><span class="cx"> "DELETE FROM itemkeywords WHERE itemkeywords.item_id = :item_id AND itemkeywords.keyword_id = :keyword_id", </span><span class="cx"> [{'item_id': objects[5].item_id, 'keyword_id': dkid}] </span><span class="lines">@@ -996,8 +992,8 @@ </span><span class="cx"> ) </span><span class="cx"> ]) </span><span class="cx"> </span><del>- objectstore.delete(objects[3]) - objectstore.flush() </del><ins>+ ctx.current.delete(objects[3]) + ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> def testassociation(self): </span><span class="cx"> class IKAssociation(object): </span><span class="lines">@@ -1057,8 +1053,8 @@ </span><span class="cx"> ik.keyword = k </span><span class="cx"> item.keywords.append(ik) </span><span class="cx"> </span><del>- objectstore.get_session().flush() - objectstore.clear() </del><ins>+ ctx.current.flush() + ctx.current.clear() </ins><span class="cx"> l = m.select(items.c.item_name.in_(*[e['item_name'] for e in data[1:]]), order_by=[items.c.item_name, keywords.c.name]) </span><span class="cx"> self.assert_result(l, *data) </span><span class="cx"> </span><span class="lines">@@ -1076,7 +1072,7 @@ </span><span class="cx"> a = Address() </span><span class="cx"> a.email_address = 'testaddress' </span><span class="cx"> a.user = u </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> print repr(u.addresses) </span><span class="cx"> x = False </span><span class="cx"> try: </span><span class="lines">@@ -1088,8 +1084,8 @@ </span><span class="cx"> if x: </span><span class="cx"> self.assert_(False, "User addresses element should be scalar based") </span><span class="cx"> </span><del>- objectstore.delete(u) - objectstore.flush() </del><ins>+ ctx.current.delete(u) + ctx.current.flush() </ins><span class="cx"> </span><span class="cx"> def testdoublerelation(self): </span><span class="cx"> m2 = mapper(Address, addresses) </span><span class="lines">@@ -1109,14 +1105,13 @@ </span><span class="cx"> </span><span class="cx"> u.boston_addresses.append(a) </span><span class="cx"> u.newyork_addresses.append(b) </span><del>- objectstore.flush() </del><ins>+ ctx.current.flush() </ins><span class="cx"> </span><del>-class SaveTest2(AssertMixin): </del><ins>+class SaveTest2(SessionTest): </ins><span class="cx"> </span><span class="cx"> def setUp(self): </span><del>- self.install_threadlocal() </del><span class="cx"> db.echo = False </span><del>- objectstore.clear() </del><ins>+ ctx.current.clear() </ins><span class="cx"> clear_mappers() </span><span class="cx"> self.users = Table('users', db, </span><span class="cx"> Column('user_id', Integer, Sequence('user_id_seq', optional=True), primary_key = True), </span><span class="lines">@@ -1142,7 +1137,7 @@ </span><span class="cx"> self.addresses.drop() </span><span class="cx"> self.users.drop() </span><span class="cx"> db.echo = testbase.echo </span><del>- self.uninstall_threadlocal() </del><ins>+ SessionTest.tearDown(self) </ins><span class="cx"> </span><span class="cx"> def testbackwardsnonmatch(self): </span><span class="cx"> m = mapper(Address, self.addresses, properties = dict( </span><span class="lines">@@ -1159,7 +1154,7 @@ </span><span class="cx"> a.user = User() </span><span class="cx"> a.user.user_name = elem['user_name'] </span><span class="cx"> objects.append(a) </span><del>- self.assert_sql(db, lambda: objectstore.flush(), [ </del><ins>+ self.assert_sql(db, lambda: ctx.current.flush(), [ </ins><span class="cx"> ( </span><span class="cx"> "INSERT INTO users (user_name) VALUES (:user_name)", </span><span class="cx"> {'user_name': 'thesub'} </span></span></pre></div> <a id="sqlalchemybranchesschematestproxy_enginepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/proxy_engine.py (1477 => 1478)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/proxy_engine.py 2006-05-20 18:52:13 UTC (rev 1477) +++ sqlalchemy/branches/schema/test/proxy_engine.py 2006-05-21 16:48:14 UTC (rev 1478) </span><span class="lines">@@ -12,22 +12,28 @@ </span><span class="cx"> # </span><span class="cx"> </span><span class="cx"> </span><del>-module_engine = ProxyEngine(echo=testbase.echo) -module_metadata = MetaData() </del><ins>+class ProxyTestBase(PersistTest): + def setUpAll(self): </ins><span class="cx"> </span><del>-users = Table('users', module_metadata, - Column('user_id', Integer, primary_key=True), - Column('user_name', String(16)), - Column('password', String(20)) - ) </del><ins>+ global users, User, module_engine, module_metadata </ins><span class="cx"> </span><del>-class User(object): - pass </del><ins>+ module_engine = ProxyEngine(echo=testbase.echo) + module_metadata = MetaData() </ins><span class="cx"> </span><del>-User.mapper = mapper(User, users) </del><ins>+ users = Table('users', module_metadata, + Column('user_id', Integer, primary_key=True), + Column('user_name', String(16)), + Column('password', String(20)) + ) </ins><span class="cx"> </span><ins>+ class User(object): + pass </ins><span class="cx"> </span><del>-class ConstructTest(PersistTest): </del><ins>+ User.mapper = mapper(User, users) + def tearDownAll(self): + clear_mappers() + +class ConstructTest(ProxyTestBase): </ins><span class="cx"> """tests that we can build SQL constructs without engine-specific parameters, particulary </span><span class="cx"> oid_column, being needed, as the proxy engine is usually not connected yet.""" </span><span class="cx"> </span><span class="lines">@@ -40,7 +46,7 @@ </span><span class="cx"> j = join(t, t2) </span><span class="cx"> ... [truncated message content] |