]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fix: AsyncSession.close_all()
authorBryan不可思议 <programripper@foxmail.com>
Thu, 5 Oct 2023 21:16:14 +0000 (21:16 +0000)
committerGitHub <noreply@github.com>
Thu, 5 Oct 2023 21:16:14 +0000 (21:16 +0000)
lib/sqlalchemy/ext/asyncio/session.py
test/ext/asyncio/test_session_py3k.py

index dcbf26c6c49364a000cd37b5020c1b9c610b6fb3..897cc496e85032c8d64ae7ead824de819d7efdcb 100644 (file)
@@ -32,6 +32,7 @@ from .result import _ensure_sync_result
 from .result import AsyncResult
 from .result import AsyncScalarResult
 from ... import util
+from ...orm import close_all_sessions
 from ...orm import object_session
 from ...orm import Session
 from ...orm import SessionTransaction
@@ -1057,9 +1058,9 @@ class AsyncSession(ReversibleProxy[Session]):
         await greenlet_spawn(self.sync_session.invalidate)
 
     @classmethod
-    async def close_all(self) -> None:
+    async def close_all(cls) -> None:
         """Close all :class:`_asyncio.AsyncSession` sessions."""
-        await greenlet_spawn(self.sync_session.close_all)
+        await greenlet_spawn(close_all_sessions)
 
     async def __aenter__(self: _AS) -> _AS:
         return self
index 19ce55a2d7c250efbff1971595f9f525bd599372..a3988ea52d8e969095703686d2d20abb95af9ccc 100644 (file)
@@ -122,6 +122,15 @@ class AsyncSessionTest(AsyncFixture):
                     sync_connection.dialect.default_sequence_base,
                 )
 
+    @async_test
+    async def test_close_all(self, async_session):
+        User = self.classes.User
+        u = User(name="u")
+        async_session.add(u)
+        await async_session.commit()
+        await AsyncSession.close_all()
+        assert async_session.sync_session.identity_map.values() == []
+
 
 class AsyncSessionQueryTest(AsyncFixture):
     @async_test