summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2017-03-27 12:27:56 -0400
committerGerrit Code Review <gerrit@awstats.zzzcomputing.com>2017-03-27 12:27:56 -0400
commit6eae79ac55ea2b25270758ed72f1a08e7f54980e (patch)
tree4d99b411a29368d6abc0a1ddf137cc89302f42fe /lib/sqlalchemy
parentecf85cb083c6dd92cf845b703a8aa79d4a445267 (diff)
parentc0a224aba3d4e2a41f92a29f9d18c6cb9d09d61f (diff)
downloadsqlalchemy-6eae79ac55ea2b25270758ed72f1a08e7f54980e.tar.gz
Merge "Add safe_reraise() + warnings only to Connection._autorollback"
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/engine/base.py3
-rw-r--r--lib/sqlalchemy/testing/assertions.py9
-rw-r--r--lib/sqlalchemy/util/langhelpers.py8
3 files changed, 14 insertions, 6 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py
index 0334d2d7a..f680edada 100644
--- a/lib/sqlalchemy/engine/base.py
+++ b/lib/sqlalchemy/engine/base.py
@@ -1383,7 +1383,8 @@ class Connection(Connectable):
if not self._is_disconnect:
if cursor:
self._safe_close_cursor(cursor)
- self._autorollback()
+ with util.safe_reraise(warn_only=True):
+ self._autorollback()
if newraise:
util.raise_from_cause(newraise, exc_info)
diff --git a/lib/sqlalchemy/testing/assertions.py b/lib/sqlalchemy/testing/assertions.py
index 0244f18a9..884556345 100644
--- a/lib/sqlalchemy/testing/assertions.py
+++ b/lib/sqlalchemy/testing/assertions.py
@@ -10,11 +10,11 @@ from __future__ import absolute_import
from . import util as testutil
from sqlalchemy import pool, orm, util
from sqlalchemy.engine import default, url
-from sqlalchemy.util import decorator
+from sqlalchemy.util import decorator, compat
from sqlalchemy import types as sqltypes, schema, exc as sa_exc
import warnings
import re
-from .exclusions import db_spec, _is_excluded
+from .exclusions import db_spec
from . import assertsql
from . import config
from .util import fail
@@ -118,7 +118,8 @@ def uses_deprecated(*messages):
@contextlib.contextmanager
-def _expect_warnings(exc_cls, messages, regex=True, assert_=True):
+def _expect_warnings(exc_cls, messages, regex=True, assert_=True,
+ py2konly=False):
if regex:
filters = [re.compile(msg, re.I | re.S) for msg in messages]
@@ -147,7 +148,7 @@ def _expect_warnings(exc_cls, messages, regex=True, assert_=True):
with mock.patch("warnings.warn", our_warn):
yield
- if assert_:
+ if assert_ and (not py2konly or not compat.py3k):
assert not seen, "Warnings were not seen: %s" % \
", ".join("%r" % (s.pattern if regex else s) for s in seen)
diff --git a/lib/sqlalchemy/util/langhelpers.py b/lib/sqlalchemy/util/langhelpers.py
index 41fed882d..9ca19f138 100644
--- a/lib/sqlalchemy/util/langhelpers.py
+++ b/lib/sqlalchemy/util/langhelpers.py
@@ -49,6 +49,11 @@ class safe_reraise(object):
"""
+ __slots__ = ('warn_only', '_exc_info')
+
+ def __init__(self, warn_only=False):
+ self.warn_only = warn_only
+
def __enter__(self):
self._exc_info = sys.exc_info()
@@ -57,7 +62,8 @@ class safe_reraise(object):
if type_ is None:
exc_type, exc_value, exc_tb = self._exc_info
self._exc_info = None # remove potential circular references
- compat.reraise(exc_type, exc_value, exc_tb)
+ if not self.warn_only:
+ compat.reraise(exc_type, exc_value, exc_tb)
else:
if not compat.py3k and self._exc_info and self._exc_info[1]:
# emulate Py3K's behavior of telling us when an exception