summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-10-17 19:37:45 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-10-17 19:37:45 -0400
commit6f40eb37cbdcdae032d73c3537df1e01d2e9e67c (patch)
tree663eddd7294ff70818d3d789d411616f5924754c /test
parent2924f8685c1d9f25820aa154691afe2d2de645f4 (diff)
downloadsqlalchemy-6f40eb37cbdcdae032d73c3537df1e01d2e9e67c.tar.gz
- Exception messages have been spiffed up a bit. The SQL statement
and parameters are not displayed if None, reducing confusion for error messages that weren't related to a statement. The full module and classname for the DBAPI-level exception is displayed, making it clear that this is a wrapped DBAPI exception. The statement and parameters themselves are bounded within a bracketed sections to better isolate them from the error message and from each other. fixes #3172
Diffstat (limited to 'test')
-rw-r--r--test/base/test_except.py34
-rw-r--r--test/engine/test_execute.py6
-rw-r--r--test/engine/test_logging.py8
-rw-r--r--test/sql/test_query.py7
4 files changed, 32 insertions, 23 deletions
diff --git a/test/base/test_except.py b/test/base/test_except.py
index a438e26d9..918e7a042 100644
--- a/test/base/test_except.py
+++ b/test/base/test_except.py
@@ -44,8 +44,10 @@ class WrapTest(fixtures.TestBase):
'this is a message',
None, OperationalError(), DatabaseError)
except sa_exceptions.DBAPIError as exc:
- assert str(exc) \
- == "(OperationalError) 'this is a message' None"
+ eq_(
+ str(exc),
+ "(test.base.test_except.OperationalError) "
+ "[SQL: 'this is a message']")
def test_tostring_large_dict(self):
try:
@@ -58,7 +60,8 @@ class WrapTest(fixtures.TestBase):
OperationalError(), DatabaseError)
except sa_exceptions.DBAPIError as exc:
assert str(exc).startswith(
- "(OperationalError) 'this is a message' {")
+ "(test.base.test_except.OperationalError) "
+ "[SQL: 'this is a message'] [parameters: {")
def test_tostring_large_list(self):
try:
@@ -68,8 +71,9 @@ class WrapTest(fixtures.TestBase):
OperationalError(), DatabaseError)
except sa_exceptions.DBAPIError as exc:
assert str(exc).startswith(
- "(OperationalError) 'this is a "
- "message' [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]")
+ "(test.base.test_except.OperationalError) "
+ "[SQL: 'this is a message'] [parameters: "
+ "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]")
def test_tostring_large_executemany(self):
try:
@@ -81,9 +85,10 @@ class WrapTest(fixtures.TestBase):
except sa_exceptions.DBAPIError as exc:
eq_(
str(exc),
- "(OperationalError) 'this is a message' [{1: 1}, "
+ "(test.base.test_except.OperationalError) "
+ "[SQL: 'this is a message'] [parameters: [{1: 1}, "
"{1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: "
- "1}, {1: 1}, {1: 1}]"
+ "1}, {1: 1}, {1: 1}]]"
)
try:
raise sa_exceptions.DBAPIError.instance('this is a message', [
@@ -92,10 +97,11 @@ class WrapTest(fixtures.TestBase):
], OperationalError(), DatabaseError)
except sa_exceptions.DBAPIError as exc:
eq_(str(exc),
- "(OperationalError) 'this is a message' [{1: 1}, "
+ "(test.base.test_except.OperationalError) "
+ "[SQL: 'this is a message'] [parameters: [{1: 1}, "
"{1: 1}, {1: 1}, {1: 1}, {1: 1}, {1: 1}, "
"{1: 1}, {1: 1} ... displaying 10 of 11 total "
- "bound parameter sets ... {1: 1}, {1: 1}]"
+ "bound parameter sets ... {1: 1}, {1: 1}]]"
)
try:
raise sa_exceptions.DBAPIError.instance(
@@ -108,8 +114,9 @@ class WrapTest(fixtures.TestBase):
except sa_exceptions.DBAPIError as exc:
eq_(
str(exc),
- "(OperationalError) 'this is a message' [(1,), "
- "(1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,)]")
+ "(test.base.test_except.OperationalError) "
+ "[SQL: 'this is a message'] [parameters: [(1,), "
+ "(1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,), (1,)]]")
try:
raise sa_exceptions.DBAPIError.instance('this is a message', [
(1, ), (1, ), (1, ), (1, ), (1, ), (1, ), (1, ), (1, ), (1, ),
@@ -117,10 +124,11 @@ class WrapTest(fixtures.TestBase):
], OperationalError(), DatabaseError)
except sa_exceptions.DBAPIError as exc:
eq_(str(exc),
- "(OperationalError) 'this is a message' [(1,), "
+ "(test.base.test_except.OperationalError) "
+ "[SQL: 'this is a message'] [parameters: [(1,), "
"(1,), (1,), (1,), (1,), (1,), (1,), (1,) "
"... displaying 10 of 11 total bound "
- "parameter sets ... (1,), (1,)]"
+ "parameter sets ... (1,), (1,)]]"
)
def test_db_error_busted_dbapi(self):
diff --git a/test/engine/test_execute.py b/test/engine/test_execute.py
index e0bba0afa..00b4ba7f3 100644
--- a/test/engine/test_execute.py
+++ b/test/engine/test_execute.py
@@ -285,7 +285,7 @@ class ExecuteTest(fixtures.TestBase):
def _go(conn):
assert_raises_message(
tsa.exc.StatementError,
- r"nope \(original cause: Exception: nope\) u?'SELECT 1 ",
+ r"\(exceptions.Exception\) nope \[SQL\: u?'SELECT 1 ",
conn.execute,
select([1]).
where(
@@ -1608,7 +1608,7 @@ class HandleErrorTest(fixtures.TestBase):
with engine.connect() as conn:
assert_raises_message(
tsa.exc.StatementError,
- r"nope \(original cause: Exception: nope\) u?'SELECT 1 ",
+ r"\(exceptions.Exception\) nope \[SQL\: u?'SELECT 1 ",
conn.execute,
select([1]).where(
column('foo') == literal('bar', MyType()))
@@ -1799,7 +1799,7 @@ class HandleErrorTest(fixtures.TestBase):
with engine.connect() as conn:
assert_raises_message(
tsa.exc.StatementError,
- r"nope \(original cause: Exception: nope\) u?'SELECT 1 ",
+ r"\(exceptions.Exception\) nope \[SQL\: u?'SELECT 1 ",
conn.execute,
select([1]).where(
column('foo') == literal('bar', MyType()))
diff --git a/test/engine/test_logging.py b/test/engine/test_logging.py
index 1432a0f7b..180ea9388 100644
--- a/test/engine/test_logging.py
+++ b/test/engine/test_logging.py
@@ -56,7 +56,8 @@ class LogParamsTest(fixtures.TestBase):
def test_error_large_dict(self):
assert_raises_message(
tsa.exc.DBAPIError,
- r".*'INSERT INTO nonexistent \(data\) values \(:data\)' "
+ r".*'INSERT INTO nonexistent \(data\) values \(:data\)'\] "
+ "\[parameters: "
"\[{'data': '0'}, {'data': '1'}, {'data': '2'}, "
"{'data': '3'}, {'data': '4'}, {'data': '5'}, "
"{'data': '6'}, {'data': '7'} ... displaying 10 of "
@@ -71,8 +72,9 @@ class LogParamsTest(fixtures.TestBase):
assert_raises_message(
tsa.exc.DBAPIError,
r".*INSERT INTO nonexistent \(data\) values "
- "\(\?\)' \[\('0',\), \('1',\), \('2',\), \('3',\), "
- "\('4',\), \('5',\), \('6',\), \('7',\) ... displaying "
+ "\(\?\)'\] \[parameters: \[\('0',\), \('1',\), \('2',\), \('3',\), "
+ "\('4',\), \('5',\), \('6',\), \('7',\) "
+ "... displaying "
"10 of 100 total bound parameter sets ... "
"\('98',\), \('99',\)\]",
lambda: self.eng.execute(
diff --git a/test/sql/test_query.py b/test/sql/test_query.py
index fc040dfed..2f13486eb 100644
--- a/test/sql/test_query.py
+++ b/test/sql/test_query.py
@@ -81,11 +81,10 @@ class QueryTest(fixtures.TestBase):
assert_raises_message(
exc.StatementError,
- r"A value is required for bind parameter 'user_name', in "
+ r"\(sqlalchemy.exc.InvalidRequestError\) A value is required for "
+ "bind parameter 'user_name', in "
"parameter group 2 "
- "\(original cause: (sqlalchemy.exc.)?InvalidRequestError: A "
- "value is required for bind parameter 'user_name', in "
- "parameter group 2\) u?'INSERT INTO query_users",
+ r"\[SQL: u?'INSERT INTO query_users",
users.insert().execute,
{'user_id': 7, 'user_name': 'jack'},
{'user_id': 8, 'user_name': 'ed'},