summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-05-15 12:35:21 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-05-15 12:38:28 -0400
commitd178707ecaeb547470e2b7b37b9a939abc69cbd0 (patch)
treedc4b674748cf673a123b90797c3525c3a13ef657 /lib/sqlalchemy/testing
parent64c1f2e5688879e1cc087f4e4a893d32267fd1fb (diff)
downloadsqlalchemy-d178707ecaeb547470e2b7b37b9a939abc69cbd0.tar.gz
- Added support for the case of the misbehaving DBAPI that has
pep-249 exception names linked to exception classes of an entirely different name, preventing SQLAlchemy's own exception wrapping from wrapping the error appropriately. The SQLAlchemy dialect in use needs to implement a new accessor :attr:`.DefaultDialect.dbapi_exception_translation_map` to support this feature; this is implemented now for the py-postgresql dialect. fixes #3421
Diffstat (limited to 'lib/sqlalchemy/testing')
-rw-r--r--lib/sqlalchemy/testing/suite/__init__.py1
-rw-r--r--lib/sqlalchemy/testing/suite/test_dialect.py39
2 files changed, 40 insertions, 0 deletions
diff --git a/lib/sqlalchemy/testing/suite/__init__.py b/lib/sqlalchemy/testing/suite/__init__.py
index 780aa40aa..9eeffd4cb 100644
--- a/lib/sqlalchemy/testing/suite/__init__.py
+++ b/lib/sqlalchemy/testing/suite/__init__.py
@@ -1,4 +1,5 @@
+from sqlalchemy.testing.suite.test_dialect import *
from sqlalchemy.testing.suite.test_ddl import *
from sqlalchemy.testing.suite.test_insert import *
from sqlalchemy.testing.suite.test_sequence import *
diff --git a/lib/sqlalchemy/testing/suite/test_dialect.py b/lib/sqlalchemy/testing/suite/test_dialect.py
new file mode 100644
index 000000000..5ad5694b3
--- /dev/null
+++ b/lib/sqlalchemy/testing/suite/test_dialect.py
@@ -0,0 +1,39 @@
+from .. import fixtures, config
+from sqlalchemy import exc
+from sqlalchemy import Integer, String
+from .. import assert_raises
+from ..schema import Table, Column
+
+
+class ExceptionTest(fixtures.TablesTest):
+ """Test basic exception wrapping.
+
+ DBAPIs vary a lot in exception behavior so to actually anticipate
+ specific exceptions from real round trips, we need to be conservative.
+
+ """
+ run_deletes = 'each'
+
+ __backend__ = True
+
+ @classmethod
+ def define_tables(cls, metadata):
+ Table('manual_pk', metadata,
+ Column('id', Integer, primary_key=True, autoincrement=False),
+ Column('data', String(50))
+ )
+
+ def test_integrity_error(self):
+
+ with config.db.begin() as conn:
+ conn.execute(
+ self.tables.manual_pk.insert(),
+ {'id': 1, 'data': 'd1'}
+ )
+
+ assert_raises(
+ exc.IntegrityError,
+ conn.execute,
+ self.tables.manual_pk.insert(),
+ {'id': 1, 'data': 'd1'}
+ )