diff options
| author | Federico Caselli <cfederico87@gmail.com> | 2022-01-19 22:10:09 +0100 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-01-19 17:23:53 -0500 |
| commit | e5606c0ba8bf2fed6daa7a488433d55ddbf302e9 (patch) | |
| tree | c6cee53e939560f9081099e4465d855f25ca73de | |
| parent | b235a8cb1042cb7706dddc0f783cabb81e141055 (diff) | |
| download | sqlalchemy-e5606c0ba8bf2fed6daa7a488433d55ddbf302e9.tar.gz | |
Added missing method ``invalidate` in the `AsyncSession`
Fixes: #7524
Change-Id: I20387e6700015c44f23bd2d05347bdce802196c0
| -rw-r--r-- | doc/build/changelog/unreleased_14/7524.rst | 7 | ||||
| -rw-r--r-- | lib/sqlalchemy/ext/asyncio/scoping.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/ext/asyncio/session.py | 7 | ||||
| -rw-r--r-- | test/ext/asyncio/test_session_py3k.py | 17 |
4 files changed, 32 insertions, 0 deletions
diff --git a/doc/build/changelog/unreleased_14/7524.rst b/doc/build/changelog/unreleased_14/7524.rst new file mode 100644 index 000000000..68ceefd67 --- /dev/null +++ b/doc/build/changelog/unreleased_14/7524.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: bug, orm, asyncio + :tickets: 7524 + + Added missing method :meth:`_asyncio.AsyncSession.invalidate` to the + :class:`_asyncio.AsyncSession` class. + diff --git a/lib/sqlalchemy/ext/asyncio/scoping.py b/lib/sqlalchemy/ext/asyncio/scoping.py index 535c30d61..46c8f0baa 100644 --- a/lib/sqlalchemy/ext/asyncio/scoping.py +++ b/lib/sqlalchemy/ext/asyncio/scoping.py @@ -36,6 +36,7 @@ from ...util import ScopedRegistry "get", "get_bind", "is_modified", + "invalidate", "merge", "refresh", "rollback", diff --git a/lib/sqlalchemy/ext/asyncio/session.py b/lib/sqlalchemy/ext/asyncio/session.py index bb074400a..0840a0d7d 100644 --- a/lib/sqlalchemy/ext/asyncio/session.py +++ b/lib/sqlalchemy/ext/asyncio/session.py @@ -605,6 +605,13 @@ class AsyncSession(ReversibleProxy): """ return await greenlet_spawn(self.sync_session.close) + async def invalidate(self): + """Close this Session, using connection invalidation. + + For a complete description, see :meth:`_orm.Session.invalidate`. + """ + return await greenlet_spawn(self.sync_session.invalidate) + @classmethod async def close_all(self): """Close all :class:`_asyncio.AsyncSession` sessions.""" diff --git a/test/ext/asyncio/test_session_py3k.py b/test/ext/asyncio/test_session_py3k.py index 4e475b212..bcaea05e5 100644 --- a/test/ext/asyncio/test_session_py3k.py +++ b/test/ext/asyncio/test_session_py3k.py @@ -22,6 +22,7 @@ from sqlalchemy.testing import eq_ from sqlalchemy.testing import is_ from sqlalchemy.testing import is_true from sqlalchemy.testing import mock +from sqlalchemy.testing.assertions import is_false from .test_engine_py3k import AsyncFixture as _AsyncFixture from ...orm import _fixtures @@ -488,6 +489,22 @@ class AsyncSessionTransactionTest(AsyncFixture): result = await async_session.execute(select(User)) eq_(result.all(), []) + @async_test + @testing.requires.independent_connections + async def test_invalidate(self, async_session): + await async_session.execute(select(1)) + conn = async_session.sync_session.connection() + fairy = conn.connection + connection_rec = fairy._connection_record + + is_false(conn.closed) + is_false(connection_rec._is_hard_or_soft_invalidated()) + await async_session.invalidate() + is_true(conn.closed) + is_true(connection_rec._is_hard_or_soft_invalidated()) + + eq_(async_session.in_transaction(), False) + class AsyncCascadesTest(AsyncFixture): run_inserts = None |
