summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2019-10-11 17:27:55 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2019-10-11 17:27:55 +0000
commit5092ab02f7a8c1f06f36a46cd0a4cf258517f8c5 (patch)
tree1d03a8b64dc19d68368f89bdca2a820bc7839772 /lib
parent476df84ec995324cf2162b9b28ad8a58b90cfadf (diff)
parent9488480abea15298ded6996aa13b42edf134e467 (diff)
downloadsqlalchemy-5092ab02f7a8c1f06f36a46cd0a4cf258517f8c5.tar.gz
Merge "pass executemany context to _repr_params"
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/engine/base.py11
-rw-r--r--lib/sqlalchemy/exc.py16
-rw-r--r--lib/sqlalchemy/sql/util.py20
-rw-r--r--lib/sqlalchemy/testing/__init__.py1
-rw-r--r--lib/sqlalchemy/testing/assertions.py14
5 files changed, 49 insertions, 13 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py
index 27da8c295..95e05be98 100644
--- a/lib/sqlalchemy/engine/base.py
+++ b/lib/sqlalchemy/engine/base.py
@@ -1223,7 +1223,10 @@ class Connection(Connectable):
self.engine.logger.info(statement)
if not self.engine.hide_parameters:
self.engine.logger.info(
- "%r", sql_util._repr_params(parameters, batches=10)
+ "%r",
+ sql_util._repr_params(
+ parameters, batches=10, ismulti=context.executemany
+ ),
)
else:
self.engine.logger.info(
@@ -1394,6 +1397,9 @@ class Connection(Connectable):
self.dialect.dbapi.Error,
hide_parameters=self.engine.hide_parameters,
dialect=self.dialect,
+ ismulti=context.executemany
+ if context is not None
+ else None,
),
exc_info,
)
@@ -1416,6 +1422,9 @@ class Connection(Connectable):
hide_parameters=self.engine.hide_parameters,
connection_invalidated=self._is_disconnect,
dialect=self.dialect,
+ ismulti=context.executemany
+ if context is not None
+ else None,
)
else:
sqlalchemy_exception = None
diff --git a/lib/sqlalchemy/exc.py b/lib/sqlalchemy/exc.py
index 1b3ac7ce2..79f786882 100644
--- a/lib/sqlalchemy/exc.py
+++ b/lib/sqlalchemy/exc.py
@@ -332,6 +332,8 @@ class StatementError(SQLAlchemyError):
orig = None
"""The DBAPI exception object."""
+ ismulti = None
+
def __init__(
self,
message,
@@ -340,11 +342,13 @@ class StatementError(SQLAlchemyError):
orig,
hide_parameters=False,
code=None,
+ ismulti=None,
):
SQLAlchemyError.__init__(self, message, code=code)
self.statement = statement
self.params = params
self.orig = orig
+ self.ismulti = ismulti
self.hide_parameters = hide_parameters
self.detail = []
@@ -360,6 +364,7 @@ class StatementError(SQLAlchemyError):
self.params,
self.orig,
self.hide_parameters,
+ self.ismulti,
),
)
@@ -381,7 +386,9 @@ class StatementError(SQLAlchemyError):
"[SQL parameters hidden due to hide_parameters=True]"
)
else:
- params_repr = util._repr_params(self.params, 10)
+ params_repr = util._repr_params(
+ self.params, 10, ismulti=self.ismulti
+ )
details.append("[parameters: %r]" % params_repr)
code_str = self._code_str()
if code_str:
@@ -424,6 +431,7 @@ class DBAPIError(StatementError):
hide_parameters=False,
connection_invalidated=False,
dialect=None,
+ ismulti=None,
):
# Don't ever wrap these, just return them directly as if
# DBAPIError didn't exist.
@@ -448,6 +456,7 @@ class DBAPIError(StatementError):
orig,
hide_parameters=hide_parameters,
code=orig.code,
+ ismulti=ismulti,
)
elif not isinstance(orig, dbapi_base_err) and statement:
return StatementError(
@@ -461,6 +470,7 @@ class DBAPIError(StatementError):
params,
orig,
hide_parameters=hide_parameters,
+ ismulti=ismulti,
)
glob = globals()
@@ -481,6 +491,7 @@ class DBAPIError(StatementError):
connection_invalidated=connection_invalidated,
hide_parameters=hide_parameters,
code=cls.code,
+ ismulti=ismulti,
)
def __reduce__(self):
@@ -492,6 +503,7 @@ class DBAPIError(StatementError):
self.orig,
self.hide_parameters,
self.connection_invalidated,
+ self.ismulti,
),
)
@@ -503,6 +515,7 @@ class DBAPIError(StatementError):
hide_parameters=False,
connection_invalidated=False,
code=None,
+ ismulti=None,
):
try:
text = str(orig)
@@ -517,6 +530,7 @@ class DBAPIError(StatementError):
orig,
hide_parameters,
code=code,
+ ismulti=ismulti,
)
self.connection_invalidated = connection_invalidated
diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py
index 5aeed0c1c..e109852a2 100644
--- a/lib/sqlalchemy/sql/util.py
+++ b/lib/sqlalchemy/sql/util.py
@@ -464,31 +464,29 @@ class _repr_params(_repr_base):
"""
- __slots__ = "params", "batches"
+ __slots__ = "params", "batches", "ismulti"
- def __init__(self, params, batches, max_chars=300):
+ def __init__(self, params, batches, max_chars=300, ismulti=None):
self.params = params
+ self.ismulti = ismulti
self.batches = batches
self.max_chars = max_chars
def __repr__(self):
+ if self.ismulti is None:
+ return self.trunc(self.params)
+
if isinstance(self.params, list):
typ = self._LIST
- ismulti = self.params and isinstance(
- self.params[0], (list, dict, tuple)
- )
+
elif isinstance(self.params, tuple):
typ = self._TUPLE
- ismulti = self.params and isinstance(
- self.params[0], (list, dict, tuple)
- )
elif isinstance(self.params, dict):
typ = self._DICT
- ismulti = False
else:
return self.trunc(self.params)
- if ismulti and len(self.params) > self.batches:
+ if self.ismulti and len(self.params) > self.batches:
msg = " ... displaying %i of %i total bound parameter sets ... "
return " ".join(
(
@@ -499,7 +497,7 @@ class _repr_params(_repr_base):
self._repr_multi(self.params[-2:], typ)[1:],
)
)
- elif ismulti:
+ elif self.ismulti:
return self._repr_multi(self.params, typ)
else:
return self._repr_params(self.params, typ)
diff --git a/lib/sqlalchemy/testing/__init__.py b/lib/sqlalchemy/testing/__init__.py
index 090c8488a..2b8158fbb 100644
--- a/lib/sqlalchemy/testing/__init__.py
+++ b/lib/sqlalchemy/testing/__init__.py
@@ -10,6 +10,7 @@ from . import config # noqa
from . import mock # noqa
from .assertions import assert_raises # noqa
from .assertions import assert_raises_message # noqa
+from .assertions import assert_raises_return # noqa
from .assertions import AssertsCompiledSQL # noqa
from .assertions import AssertsExecutionResults # noqa
from .assertions import ComparesTables # noqa
diff --git a/lib/sqlalchemy/testing/assertions.py b/lib/sqlalchemy/testing/assertions.py
index 819fedcc7..f057ae37b 100644
--- a/lib/sqlalchemy/testing/assertions.py
+++ b/lib/sqlalchemy/testing/assertions.py
@@ -307,6 +307,20 @@ def assert_raises(except_cls, callable_, *args, **kw):
assert success, "Callable did not raise an exception"
+def assert_raises_return(except_cls, callable_, *args, **kw):
+ ret_err = None
+ try:
+ callable_(*args, **kw)
+ success = False
+ except except_cls as err:
+ success = True
+ ret_err = err
+
+ # assert outside the block so it works for AssertionError too !
+ assert success, "Callable did not raise an exception"
+ return ret_err
+
+
def assert_raises_message(except_cls, msg, callable_, *args, **kwargs):
try:
callable_(*args, **kwargs)