[Sqlalchemy-commits] [1073] sqlalchemy/trunk/test: made SchemaEngine more prominent as the base of T
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-03-01 21:21:13
|
<!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>[1073] sqlalchemy/trunk/test: made SchemaEngine more prominent as the base of Table association</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1073</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-03-01 15:20:59 -0600 (Wed, 01 Mar 2006)</dd> </dl> <h3>Log Message</h3> <pre>made SchemaEngine more prominent as the base of Table association BaseProxyEngine descends from SchemaEngine fixes to sqlite/postgres reflection to use the correct engine for table lookups Table engine can be none which will default to schema.default_engine (although its still positional for now, so still needs to be explicit to make room for Columns) __init__ sets default_engine to be a blank ProxyEngine fixes to test suite to allow --db proxy.<dbname> to really test proxyengine</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunklibsqlalchemy__init__py">sqlalchemy/trunk/lib/sqlalchemy/__init__.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemydatabasespostgrespy">sqlalchemy/trunk/lib/sqlalchemy/databases/postgres.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemydatabasessqlitepy">sqlalchemy/trunk/lib/sqlalchemy/databases/sqlite.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemyenginepy">sqlalchemy/trunk/lib/sqlalchemy/engine.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemyextproxypy">sqlalchemy/trunk/lib/sqlalchemy/ext/proxy.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemyschemapy">sqlalchemy/trunk/lib/sqlalchemy/schema.py</a></li> <li><a href="#sqlalchemytrunktestenginespy">sqlalchemy/trunk/test/engines.py</a></li> <li><a href="#sqlalchemytrunktestinheritancepy">sqlalchemy/trunk/test/inheritance.py</a></li> <li><a href="#sqlalchemytrunktestquerypy">sqlalchemy/trunk/test/query.py</a></li> <li><a href="#sqlalchemytrunktesttestbasepy">sqlalchemy/trunk/test/testbase.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunklibsqlalchemy__init__py"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/__init__.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/__init__.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/lib/sqlalchemy/__init__.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -11,3 +11,7 @@ </span><span class="cx"> from exceptions import * </span><span class="cx"> import mapping as mapperlib </span><span class="cx"> from mapping import * </span><ins>+ +import sqlalchemy.schema +import sqlalchemy.ext.proxy +sqlalchemy.schema.default_engine = sqlalchemy.ext.proxy.ProxyEngine() </ins></span></pre></div> <a id="sqlalchemytrunklibsqlalchemydatabasespostgrespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/databases/postgres.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/databases/postgres.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/lib/sqlalchemy/databases/postgres.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -199,7 +199,7 @@ </span><span class="cx"> self.opts['port'] = str(self.opts['port']) </span><span class="cx"> </span><span class="cx"> ansisql.ANSISQLEngine.__init__(self, **params) </span><del>- </del><ins>+ </ins><span class="cx"> def connect_args(self): </span><span class="cx"> return [[], self.opts] </span><span class="cx"> </span><span class="lines">@@ -277,7 +277,9 @@ </span><span class="cx"> else: </span><span class="cx"> ischema_names = pg1_ischema_names </span><span class="cx"> </span><del>- ischema.reflecttable(self, table, ischema_names) </del><ins>+ # give ischema the given table's engine with which to look up + # other tables, not 'self', since it could be a ProxyEngine + ischema.reflecttable(table.engine, table, ischema_names) </ins><span class="cx"> </span><span class="cx"> class PGCompiler(ansisql.ANSICompiler): </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemydatabasessqlitepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/databases/sqlite.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/databases/sqlite.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/lib/sqlalchemy/databases/sqlite.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -182,7 +182,9 @@ </span><span class="cx"> break </span><span class="cx"> (tablename, localcol, remotecol) = (row[2], row[3], row[4]) </span><span class="cx"> #print "row! " + repr(row) </span><del>- remotetable = Table(tablename, self, autoload = True) </del><ins>+ # look up the table based on the given table's engine, not 'self', + # since it could be a ProxyEngine + remotetable = Table(tablename, table.engine, autoload = True) </ins><span class="cx"> table.c[localcol].append_item(schema.ForeignKey(remotetable.c[remotecol])) </span><span class="cx"> # check for UNIQUE indexes </span><span class="cx"> c = self.execute("PRAGMA index_list(" + table.name + ")", {}) </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemyenginepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/engine.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/engine.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/lib/sqlalchemy/engine.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -172,6 +172,7 @@ </span><span class="cx"> # get a handle on the connection pool via the connect arguments </span><span class="cx"> # this insures the SQLEngine instance integrates with the pool referenced </span><span class="cx"> # by direct usage of pool.manager(<module>).connect(*args, **params) </span><ins>+ schema.SchemaEngine.__init__(self) </ins><span class="cx"> (cargs, cparams) = self.connect_args() </span><span class="cx"> if pool is None: </span><span class="cx"> params['echo'] = echo_pool </span><span class="lines">@@ -183,7 +184,6 @@ </span><span class="cx"> self.echo_uow = echo_uow </span><span class="cx"> self.convert_unicode = convert_unicode </span><span class="cx"> self.context = util.ThreadLocal(raiseerror=False) </span><del>- self.tables = {} </del><span class="cx"> self._ischema = None </span><span class="cx"> self._figure_paramstyle() </span><span class="cx"> if logger is None: </span><span class="lines">@@ -204,6 +204,10 @@ </span><span class="cx"> </span><span class="cx"> def hash_key(self): </span><span class="cx"> return "%s(%s)" % (self.__class__.__name__, repr(self.connect_args())) </span><ins>+ + def _get_name(self): + return sys.modules[self.__module__].descriptor()['name'] + name = property(_get_name) </ins><span class="cx"> </span><span class="cx"> def dispose(self): </span><span class="cx"> """disposes of the underlying pool manager for this SQLEngine.""" </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemyextproxypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/ext/proxy.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/ext/proxy.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/lib/sqlalchemy/ext/proxy.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -6,16 +6,14 @@ </span><span class="cx"> from sqlalchemy import sql </span><span class="cx"> from sqlalchemy.engine import create_engine </span><span class="cx"> from sqlalchemy.types import TypeEngine </span><del>- </del><ins>+import sqlalchemy.schema as schema </ins><span class="cx"> import thread, weakref </span><span class="cx"> </span><del>-class BaseProxyEngine(object): </del><ins>+class BaseProxyEngine(schema.SchemaEngine): </ins><span class="cx"> ''' </span><span class="cx"> Basis for all proxy engines </span><span class="cx"> ''' </span><del>- def __init__(self): - self.tables = {} - </del><ins>+ </ins><span class="cx"> def get_engine(self): </span><span class="cx"> raise NotImplementedError </span><span class="cx"> </span><span class="lines">@@ -24,6 +22,9 @@ </span><span class="cx"> </span><span class="cx"> engine = property(get_engine, set_engine) </span><span class="cx"> </span><ins>+ def reflecttable(self, table): + return self.get_engine().reflecttable(table) + </ins><span class="cx"> def hash_key(self): </span><span class="cx"> return "%s(%s)" % (self.__class__.__name__, id(self)) </span><span class="cx"> </span><span class="lines">@@ -83,16 +84,20 @@ </span><span class="cx"> classes for TypeEngine. </span><span class="cx"> """ </span><span class="cx"> </span><del>- def __init__(self): </del><ins>+ def __init__(self, **kwargs): </ins><span class="cx"> BaseProxyEngine.__init__(self) </span><span class="cx"> # create the local storage for uri->engine map and current engine </span><span class="cx"> self.storage = local() </span><span class="cx"> self.storage.connection = {} </span><span class="cx"> self.storage.engine = None </span><ins>+ self.kwargs = kwargs </ins><span class="cx"> </span><span class="cx"> def connect(self, uri, opts=None, **kwargs): </span><span class="cx"> """Establish connection to a real engine. </span><span class="cx"> """ </span><ins>+ kw = self.kwargs.copy() + kw.update(kwargs) + kwargs = kw </ins><span class="cx"> key = "%s(%s,%s)" % (uri, repr(opts), repr(kwargs)) </span><span class="cx"> try: </span><span class="cx"> map = self.storage.connection </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemyschemapy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/schema.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/schema.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/lib/sqlalchemy/schema.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -45,8 +45,10 @@ </span><span class="cx"> </span><span class="cx"> class TableSingleton(type): </span><span class="cx"> """a metaclass used by the Table object to provide singleton behavior.""" </span><del>- def __call__(self, name, engine, *args, **kwargs): </del><ins>+ def __call__(self, name, engine=None, *args, **kwargs): </ins><span class="cx"> try: </span><ins>+ if engine is None: + engine = default_engine </ins><span class="cx"> name = str(name) # in case of incoming unicode </span><span class="cx"> schema = kwargs.get('schema', None) </span><span class="cx"> autoload = kwargs.pop('autoload', False) </span><span class="lines">@@ -146,7 +148,6 @@ </span><span class="cx"> metaclass constructor.""" </span><span class="cx"> self._clear() </span><span class="cx"> </span><del>- print "RELOAD VALUES", args </del><span class="cx"> self._init_items(*args) </span><span class="cx"> </span><span class="cx"> def append_item(self, item): </span><span class="lines">@@ -383,7 +384,7 @@ </span><span class="cx"> if isinstance(self._colspec, str): </span><span class="cx"> return self._colspec </span><span class="cx"> elif self._colspec.table.schema is not None: </span><del>- return "%s.%s.%s" % (self._colspec.table.schema, self._colspec.table.name, self._colspec.column.key) </del><ins>+ return "%s.%s.%s" % (self._colspec.table.schema, self._colspec.table.name, self._colspec.key) </ins><span class="cx"> else: </span><span class="cx"> return "%s.%s" % (self._colspec.table.name, self._colspec.key) </span><span class="cx"> </span><span class="lines">@@ -412,7 +413,6 @@ </span><span class="cx"> self._column = table.c[colname] </span><span class="cx"> else: </span><span class="cx"> self._column = self._colspec </span><del>- </del><span class="cx"> return self._column </span><span class="cx"> </span><span class="cx"> column = property(lambda s: s._init_column()) </span><span class="lines">@@ -540,6 +540,11 @@ </span><span class="cx"> class SchemaEngine(object): </span><span class="cx"> """a factory object used to create implementations for schema objects. This object </span><span class="cx"> is the ultimate base class for the engine.SQLEngine class.""" </span><ins>+ + def __init__(self): + # a dictionary that stores Table objects keyed off their name (and possibly schema name) + self.tables = {} + </ins><span class="cx"> def reflecttable(self, table): </span><span class="cx"> """given a table, will query the database and populate its Column and ForeignKey </span><span class="cx"> objects.""" </span></span></pre></div> <a id="sqlalchemytrunktestenginespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/engines.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/engines.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/test/engines.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -58,8 +58,6 @@ </span><span class="cx"> mysql_engine='InnoDB' </span><span class="cx"> ) </span><span class="cx"> </span><del>- print repr(users) - print repr(addresses) </del><span class="cx"> </span><span class="cx"> # users.c.parent_user_id.set_foreign_key(ForeignKey(users.c.user_id)) </span><span class="cx"> </span><span class="lines">@@ -69,14 +67,14 @@ </span><span class="cx"> # clear out table registry </span><span class="cx"> users.deregister() </span><span class="cx"> addresses.deregister() </span><del>- </del><ins>+ </ins><span class="cx"> try: </span><span class="cx"> users = Table('engine_users', testbase.db, autoload = True) </span><span class="cx"> addresses = Table('engine_email_addresses', testbase.db, autoload = True) </span><span class="cx"> finally: </span><span class="cx"> addresses.drop() </span><span class="cx"> users.drop() </span><del>- </del><ins>+ </ins><span class="cx"> users.create() </span><span class="cx"> addresses.create() </span><span class="cx"> try: </span><span class="lines">@@ -86,6 +84,8 @@ </span><span class="cx"> # we can now as long as we use InnoDB </span><span class="cx"> # if testbase.db.engine.__module__.endswith('mysql'): </span><span class="cx"> # addresses.c.remote_user_id.append_item(ForeignKey('engine_users.user_id')) </span><ins>+ print users + print addresses </ins><span class="cx"> j = join(users, addresses) </span><span class="cx"> print str(j.onclause) </span><span class="cx"> self.assert_((users.c.user_id==addresses.c.remote_user_id).compare(j.onclause)) </span></span></pre></div> <a id="sqlalchemytrunktestinheritancepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/inheritance.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/inheritance.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/test/inheritance.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -139,8 +139,10 @@ </span><span class="cx"> b = Bar('barfoo') </span><span class="cx"> objectstore.commit() </span><span class="cx"> </span><del>- b.foos.append(Foo('subfoo1')) - b.foos.append(Foo('subfoo2')) </del><ins>+ f1 = Foo('subfoo1') + f2 = Foo('subfoo2') + b.foos.append(f1) + b.foos.append(f2) </ins><span class="cx"> </span><span class="cx"> objectstore.commit() </span><span class="cx"> objectstore.clear() </span><span class="lines">@@ -150,7 +152,7 @@ </span><span class="cx"> print l[0].foos </span><span class="cx"> self.assert_result(l, Bar, </span><span class="cx"> # {'id':1, 'data':'barfoo', 'bid':1, 'foos':(Foo, [{'id':2,'data':'subfoo1'}, {'id':3,'data':'subfoo2'}])}, </span><del>- {'id':1, 'data':'barfoo', 'foos':(Foo, [{'id':2,'data':'subfoo1'}, {'id':3,'data':'subfoo2'}])}, </del><ins>+ {'id':b.id, 'data':'barfoo', 'foos':(Foo, [{'id':f1.id,'data':'subfoo1'}, {'id':f2.id,'data':'subfoo2'}])}, </ins><span class="cx"> ) </span><span class="cx"> </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemytrunktestquerypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/query.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/query.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/test/query.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -47,7 +47,7 @@ </span><span class="cx"> that PassiveDefault upon insert, even though PassiveDefault says </span><span class="cx"> "let the database execute this", because in postgres we must have all the primary </span><span class="cx"> key values in memory before insert; otherwise we cant locate the just inserted row.""" </span><del>- if not db.engine.__module__.endswith('postgres'): </del><ins>+ if db.engine.name != 'postgres': </ins><span class="cx"> return </span><span class="cx"> try: </span><span class="cx"> db.execute(""" </span><span class="lines">@@ -96,8 +96,8 @@ </span><span class="cx"> x['x'] += 1 </span><span class="cx"> return x['x'] </span><span class="cx"> </span><del>- use_function_defaults = db.engine.__module__.endswith('postgres') or db.engine.__module__.endswith('oracle') - is_oracle = db.engine.__module__.endswith('oracle') </del><ins>+ use_function_defaults = db.engine.name == 'postgres' or db.engine.name == 'oracle' + is_oracle = db.engine.name == 'oracle' </ins><span class="cx"> </span><span class="cx"> # select "count(1)" from the DB which returns different results </span><span class="cx"> # on different DBs </span></span></pre></div> <a id="sqlalchemytrunktesttestbasepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/testbase.py (1072 => 1073)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/testbase.py 2006-03-01 19:43:07 UTC (rev 1072) +++ sqlalchemy/trunk/test/testbase.py 2006-03-01 21:20:59 UTC (rev 1073) </span><span class="lines">@@ -1,6 +1,7 @@ </span><span class="cx"> import unittest </span><span class="cx"> import StringIO </span><span class="cx"> import sqlalchemy.engine as engine </span><ins>+import sqlalchemy.ext.proxy </ins><span class="cx"> import re, sys </span><span class="cx"> </span><span class="cx"> echo = True </span><span class="lines">@@ -15,14 +16,22 @@ </span><span class="cx"> global db, db_uri </span><span class="cx"> </span><span class="cx"> DBTYPE = 'sqlite' </span><del>- </del><ins>+ PROXY = False + </ins><span class="cx"> if len(sys.argv) >= 3: </span><span class="cx"> if sys.argv[1] == '--dburi': </span><span class="cx"> (param, db_uri) = (sys.argv.pop(1), sys.argv.pop(1)) </span><span class="cx"> elif sys.argv[1] == '--db': </span><span class="cx"> (param, DBTYPE) = (sys.argv.pop(1), sys.argv.pop(1)) </span><span class="cx"> </span><ins>+ </ins><span class="cx"> if (None == db_uri): </span><ins>+ p = DBTYPE.split('.') + if len(p) > 1: + arg = p[0] + DBTYPE = p[1] + if arg == 'proxy': + PROXY = True </ins><span class="cx"> if DBTYPE == 'sqlite': </span><span class="cx"> db_uri = 'sqlite://filename=:memory:' </span><span class="cx"> elif DBTYPE == 'sqlite_file': </span><span class="lines">@@ -37,7 +46,11 @@ </span><span class="cx"> if not db_uri: </span><span class="cx"> raise "Could not create engine. specify --db <sqlite|sqlite_file|postgres|mysql|oracle> to test runner." </span><span class="cx"> </span><del>- db = engine.create_engine(db_uri, echo=echo, default_ordering=True) </del><ins>+ if PROXY: + db = sqlalchemy.ext.proxy.ProxyEngine(echo=echo, default_ordering=True) + db.connect(db_uri) + else: + db = engine.create_engine(db_uri, echo=echo, default_ordering=True) </ins><span class="cx"> db = EngineAssert(db) </span><span class="cx"> </span><span class="cx"> class PersistTest(unittest.TestCase): </span><span class="lines">@@ -75,7 +88,7 @@ </span><span class="cx"> else: </span><span class="cx"> self.assert_(getattr(rowobj, key) == value, "attribute %s value %s does not match %s" % (key, getattr(rowobj, key), value)) </span><span class="cx"> def assert_sql(self, db, callable_, list, with_sequences=None): </span><del>- if with_sequences is not None and (db.engine.__module__.endswith('postgres') or db.engine.__module__.endswith('oracle')): </del><ins>+ if with_sequences is not None and (db.engine.name == 'postgres' or db.engine.name == 'oracle'): </ins><span class="cx"> db.set_assert_list(self, with_sequences) </span><span class="cx"> else: </span><span class="cx"> db.set_assert_list(self, list) </span><span class="lines">@@ -89,13 +102,13 @@ </span><span class="cx"> callable_() </span><span class="cx"> finally: </span><span class="cx"> self.assert_(db.sql_count == count, "desired statement count %d does not match %d" % (count, db.sql_count)) </span><del>- </del><ins>+ </ins><span class="cx"> class EngineAssert(object): </span><span class="cx"> """decorates a SQLEngine object to match the incoming queries against a set of assertions.""" </span><span class="cx"> def __init__(self, engine): </span><span class="cx"> self.engine = engine </span><span class="cx"> self.realexec = engine.post_exec </span><del>- engine.post_exec = self.post_exec </del><ins>+ self.realexec.im_self.post_exec = self.post_exec </ins><span class="cx"> self.logger = engine.logger </span><span class="cx"> self.set_assert_list(None, None) </span><span class="cx"> self.sql_count = 0 </span></span></pre> </div> </div> </body> </html> |