diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/dialects/sqlite/pysqlcipher.py | 5 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/base.py | 3 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/selectable.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/util/__init__.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/util/_concurrency_py3k.py | 7 | ||||
| -rw-r--r-- | lib/sqlalchemy/util/concurrency.py | 4 |
6 files changed, 20 insertions, 4 deletions
diff --git a/lib/sqlalchemy/dialects/sqlite/pysqlcipher.py b/lib/sqlalchemy/dialects/sqlite/pysqlcipher.py index 1a9337671..aafc00844 100644 --- a/lib/sqlalchemy/dialects/sqlite/pysqlcipher.py +++ b/lib/sqlalchemy/dialects/sqlite/pysqlcipher.py @@ -68,6 +68,11 @@ new connection. Currently, ``cipher``, ``kdf_iter`` e = create_engine('sqlite+pysqlcipher://:testing@/foo.db?cipher=aes-256-cfb&kdf_iter=64000') +.. warning:: Previous versions of sqlalchemy did not take into consideration + the encryption-related pragmas passed in the url string, that were silently + ignored. This may cause errors when opening files saved by a + previous sqlalchemy version if the encryption options do not match. + Pooling Behavior ---------------- diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 663482b1f..64f638a50 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -1877,7 +1877,7 @@ class Connection(Connectable): ): exc_info = sys.exc_info() - is_exit_exception = not isinstance(e, Exception) + is_exit_exception = util.is_exit_exception(e) if not self._is_disconnect: self._is_disconnect = ( @@ -2325,7 +2325,6 @@ class Transaction(TransactionalContext): phase transactions may be used. """ - try: self._do_commit() finally: diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index e24585fa0..1610191d1 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -1115,7 +1115,9 @@ class Join(roles.DMLTableRole, FromClause): def is_derived_from(self, fromclause): return ( - fromclause is self + # use hash() to ensure direct comparison to annotated works + # as well + hash(fromclause) == hash(self) or self.left.is_derived_from(fromclause) or self.right.is_derived_from(fromclause) ) diff --git a/lib/sqlalchemy/util/__init__.py b/lib/sqlalchemy/util/__init__.py index 89d09f930..db3966849 100644 --- a/lib/sqlalchemy/util/__init__.py +++ b/lib/sqlalchemy/util/__init__.py @@ -101,6 +101,7 @@ from .concurrency import asyncio from .concurrency import await_fallback from .concurrency import await_only from .concurrency import greenlet_spawn +from .concurrency import is_exit_exception from .deprecations import deprecated from .deprecations import deprecated_20 from .deprecations import deprecated_20_cls diff --git a/lib/sqlalchemy/util/_concurrency_py3k.py b/lib/sqlalchemy/util/_concurrency_py3k.py index 3b60e6584..88294557d 100644 --- a/lib/sqlalchemy/util/_concurrency_py3k.py +++ b/lib/sqlalchemy/util/_concurrency_py3k.py @@ -10,7 +10,6 @@ from . import compat from .langhelpers import memoized_property from .. import exc - if compat.py37: try: from contextvars import copy_context as _copy_context @@ -25,6 +24,12 @@ else: _copy_context = None +def is_exit_exception(e): + return not isinstance(e, Exception) or isinstance( + e, (asyncio.TimeoutError, asyncio.CancelledError) + ) + + # implementation based on snaury gist at # https://gist.github.com/snaury/202bf4f22c41ca34e56297bae5f33fef # Issue for context: https://github.com/python-greenlet/greenlet/issues/173 diff --git a/lib/sqlalchemy/util/concurrency.py b/lib/sqlalchemy/util/concurrency.py index 60db9cfff..463547319 100644 --- a/lib/sqlalchemy/util/concurrency.py +++ b/lib/sqlalchemy/util/concurrency.py @@ -12,6 +12,7 @@ if compat.py3k: from ._concurrency_py3k import await_only from ._concurrency_py3k import await_fallback from ._concurrency_py3k import greenlet_spawn + from ._concurrency_py3k import is_exit_exception from ._concurrency_py3k import AsyncAdaptedLock from ._concurrency_py3k import _util_async_run # noqa F401 from ._concurrency_py3k import ( @@ -36,6 +37,9 @@ if not have_greenlet: "the greenlet library is required to use this function." ) + def is_exit_exception(e): # noqa F811 + return not isinstance(e, Exception) + def await_only(thing): # noqa F811 _not_implemented() |
