From: Mike Bayer Date: Thu, 12 Jan 2012 01:47:53 +0000 (-0500) Subject: further fixes for column/table errors X-Git-Tag: rel_0_7_5~51 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26625d897f9becd7bccc6ece037e9ad39a6a77e9;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git further fixes for column/table errors --- diff --git a/lib/sqlalchemy/exc.py b/lib/sqlalchemy/exc.py index 4ce0bfe7f4..4f776b8371 100644 --- a/lib/sqlalchemy/exc.py +++ b/lib/sqlalchemy/exc.py @@ -102,6 +102,9 @@ class NoReferencedTableError(NoReferenceError): NoReferenceError.__init__(self, message) self.table_name = tname + def __reduce__(self): + return self.__class__, (self.args[0], self.table_name) + class NoReferencedColumnError(NoReferenceError): """Raised by ``ForeignKey`` when the referred ``Column`` cannot be located.""" @@ -110,6 +113,10 @@ class NoReferencedColumnError(NoReferenceError): self.table_name = tname self.column_name = cname + def __reduce__(self): + return self.__class__, (self.args[0], self.table_name, + self.column_name) + class NoSuchTableError(InvalidRequestError): """Table does not exist or is not visible to a connection.""" diff --git a/test/engine/test_execute.py b/test/engine/test_execute.py index 361c38c2fe..44e44982fe 100644 --- a/test/engine/test_execute.py +++ b/test/engine/test_execute.py @@ -219,16 +219,19 @@ class ExecuteTest(fixtures.TestBase): tsa.exc.InterfaceError("select * from table", {"foo":"bar"}, orig), + tsa.exc.NoReferencedTableError("message", "tname"), + tsa.exc.NoReferencedColumnError("message", "tname", "cname") ): for loads, dumps in picklers(): repickled = loads(dumps(sa_exc)) eq_(repickled.args[0], sa_exc.args[0]) - eq_(repickled.params, {"foo":"bar"}) - eq_(repickled.statement, sa_exc.statement) - if hasattr(sa_exc, "connection_invalidated"): - eq_(repickled.connection_invalidated, - sa_exc.connection_invalidated) - eq_(repickled.orig.args[0], orig.args[0]) + if isinstance(sa_exc, tsa.exc.StatementError): + eq_(repickled.params, {"foo":"bar"}) + eq_(repickled.statement, sa_exc.statement) + if hasattr(sa_exc, "connection_invalidated"): + eq_(repickled.connection_invalidated, + sa_exc.connection_invalidated) + eq_(repickled.orig.args[0], orig.args[0]) def test_dont_wrap_mixin(self): class MyException(Exception, tsa.exc.DontWrapMixin):