diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2019-10-11 17:27:55 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2019-10-11 17:27:55 +0000 |
| commit | 5092ab02f7a8c1f06f36a46cd0a4cf258517f8c5 (patch) | |
| tree | 1d03a8b64dc19d68368f89bdca2a820bc7839772 /lib | |
| parent | 476df84ec995324cf2162b9b28ad8a58b90cfadf (diff) | |
| parent | 9488480abea15298ded6996aa13b42edf134e467 (diff) | |
| download | sqlalchemy-5092ab02f7a8c1f06f36a46cd0a4cf258517f8c5.tar.gz | |
Merge "pass executemany context to _repr_params"
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/engine/base.py | 11 | ||||
| -rw-r--r-- | lib/sqlalchemy/exc.py | 16 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/util.py | 20 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/__init__.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/assertions.py | 14 |
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) |
