diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-07-29 14:06:43 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-07-29 14:06:43 -0400 |
| commit | 83326bf44c590a3b22ddf9bf658f509d1491bc0f (patch) | |
| tree | 2f67a8167450d44753eb9cc2b2b3044decd3354d /test/engine/test_execute.py | |
| parent | 405c223ae50e78dacac08783c414619db20df0b7 (diff) | |
| download | sqlalchemy-83326bf44c590a3b22ddf9bf658f509d1491bc0f.tar.gz | |
- The exception wrapping system for DBAPI errors can now accommodate
non-standard DBAPI exceptions, such as the psycopg2
TransactionRollbackError. These exceptions will now be raised
using the closest available subclass in ``sqlalchemy.exc``, in the
case of TransactionRollbackError, ``sqlalchemy.exc.OperationalError``.
fixes #3075
Diffstat (limited to 'test/engine/test_execute.py')
| -rw-r--r-- | test/engine/test_execute.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/test/engine/test_execute.py b/test/engine/test_execute.py index efce371a5..36f3fbf72 100644 --- a/test/engine/test_execute.py +++ b/test/engine/test_execute.py @@ -20,7 +20,7 @@ from sqlalchemy.engine import result as _result, default from sqlalchemy.engine.base import Engine from sqlalchemy.testing import fixtures from sqlalchemy.testing.mock import Mock, call, patch -from contextlib import contextmanager +from contextlib import contextmanager, nested users, metadata, users_autoinc = None, None, None class ExecuteTest(fixtures.TestBase): @@ -236,6 +236,31 @@ class ExecuteTest(fixtures.TestBase): ) eq_(is_disconnect.call_count, 0) + def test_exception_wrapping_non_standard_dbapi_error(self): + class DBAPIError(Exception): + pass + + class OperationalError(DBAPIError): + pass + + class NonStandardException(OperationalError): + pass + + with nested( + patch.object(testing.db.dialect, "dbapi", Mock(Error=DBAPIError)), + patch.object( + testing.db.dialect, "is_disconnect", + lambda *arg: False), + patch.object( + testing.db.dialect, "do_execute", + Mock(side_effect=NonStandardException)), + ): + with testing.db.connect() as conn: + assert_raises( + tsa.exc.OperationalError, + conn.execute, "select 1" + ) + def test_exception_wrapping_non_dbapi_statement(self): class MyType(TypeDecorator): |
