From: Federico Caselli Date: Wed, 19 Jan 2022 21:10:09 +0000 (+0100) Subject: Added missing method ``invalidate` in the `AsyncSession` X-Git-Tag: rel_2_0_0b1~530^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e5606c0ba8bf2fed6daa7a488433d55ddbf302e9;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Added missing method ``invalidate` in the `AsyncSession` Fixes: #7524 Change-Id: I20387e6700015c44f23bd2d05347bdce802196c0 --- diff --git a/doc/build/changelog/unreleased_14/7524.rst b/doc/build/changelog/unreleased_14/7524.rst new file mode 100644 index 0000000000..68ceefd67a --- /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 535c30d615..46c8f0baa7 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 bb074400ab..0840a0d7d9 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 4e475b2122..bcaea05e53 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