]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Added missing method ``invalidate` in the `AsyncSession`
authorFederico Caselli <cfederico87@gmail.com>
Wed, 19 Jan 2022 21:10:09 +0000 (22:10 +0100)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 19 Jan 2022 22:23:53 +0000 (17:23 -0500)
Fixes: #7524
Change-Id: I20387e6700015c44f23bd2d05347bdce802196c0

doc/build/changelog/unreleased_14/7524.rst [new file with mode: 0644]
lib/sqlalchemy/ext/asyncio/scoping.py
lib/sqlalchemy/ext/asyncio/session.py
test/ext/asyncio/test_session_py3k.py

diff --git a/doc/build/changelog/unreleased_14/7524.rst b/doc/build/changelog/unreleased_14/7524.rst
new file mode 100644 (file)
index 0000000..68ceefd
--- /dev/null
@@ -0,0 +1,7 @@
+.. change::
+    :tags: bug, orm, asyncio
+    :tickets: 7524
+
+    Added missing method :meth:`_asyncio.AsyncSession.invalidate` to the
+    :class:`_asyncio.AsyncSession` class.
+
index 535c30d61543ee4a8f0558e944ca6fbd8c08841d..46c8f0baa77a07a1eba44b5093b03c0555ea90c8 100644 (file)
@@ -36,6 +36,7 @@ from ...util import ScopedRegistry
         "get",
         "get_bind",
         "is_modified",
+        "invalidate",
         "merge",
         "refresh",
         "rollback",
index bb074400ab1dcfaea4e2a2d051cfddc03e825174..0840a0d7d98bab5284b0675673f4d1ccd7001477 100644 (file)
@@ -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."""
index 4e475b2122e2b9c601a09e344d05d1148f8c909e..bcaea05e53f1e33183273dc17fe9b787e13b8294 100644 (file)
@@ -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