fastapi-async-sqlalchemy 0.7.0.dev1__py3-none-any.whl → 0.7.0.dev3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fastapi_async_sqlalchemy/__init__.py +1 -1
- fastapi_async_sqlalchemy/middleware.py +32 -38
- {fastapi_async_sqlalchemy-0.7.0.dev1.dist-info → fastapi_async_sqlalchemy-0.7.0.dev3.dist-info}/METADATA +1 -1
- fastapi_async_sqlalchemy-0.7.0.dev3.dist-info/RECORD +9 -0
- fastapi_async_sqlalchemy-0.7.0.dev1.dist-info/RECORD +0 -9
- {fastapi_async_sqlalchemy-0.7.0.dev1.dist-info → fastapi_async_sqlalchemy-0.7.0.dev3.dist-info}/LICENSE +0 -0
- {fastapi_async_sqlalchemy-0.7.0.dev1.dist-info → fastapi_async_sqlalchemy-0.7.0.dev3.dist-info}/WHEEL +0 -0
- {fastapi_async_sqlalchemy-0.7.0.dev1.dist-info → fastapi_async_sqlalchemy-0.7.0.dev3.dist-info}/top_level.txt +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
-
from asyncio import Task
|
|
3
2
|
from contextvars import ContextVar
|
|
4
3
|
from typing import Dict, Optional, Union
|
|
5
4
|
|
|
@@ -90,28 +89,23 @@ def create_middleware_and_session_proxy():
|
|
|
90
89
|
```
|
|
91
90
|
"""
|
|
92
91
|
commit_on_exit = _commit_on_exit_ctx.get()
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
asyncio.create_task(do_cleanup())
|
|
112
|
-
|
|
113
|
-
task.add_done_callback(cleanup)
|
|
114
|
-
return task._db_session # type: ignore
|
|
92
|
+
# Always create a new session for each access when multi_sessions=True
|
|
93
|
+
session = _Session()
|
|
94
|
+
|
|
95
|
+
async def cleanup():
|
|
96
|
+
try:
|
|
97
|
+
if commit_on_exit:
|
|
98
|
+
await session.commit()
|
|
99
|
+
except Exception:
|
|
100
|
+
await session.rollback()
|
|
101
|
+
raise
|
|
102
|
+
finally:
|
|
103
|
+
await session.close()
|
|
104
|
+
|
|
105
|
+
task = asyncio.current_task()
|
|
106
|
+
if task is not None:
|
|
107
|
+
task.add_done_callback(lambda t: asyncio.create_task(cleanup()))
|
|
108
|
+
return session
|
|
115
109
|
else:
|
|
116
110
|
session = _session.get()
|
|
117
111
|
if session is None:
|
|
@@ -126,7 +120,6 @@ def create_middleware_and_session_proxy():
|
|
|
126
120
|
multi_sessions: bool = False,
|
|
127
121
|
):
|
|
128
122
|
self.token = None
|
|
129
|
-
self.multi_sessions_token = None
|
|
130
123
|
self.commit_on_exit_token = None
|
|
131
124
|
self.session_args = session_args or {}
|
|
132
125
|
self.commit_on_exit = commit_on_exit
|
|
@@ -139,23 +132,24 @@ def create_middleware_and_session_proxy():
|
|
|
139
132
|
if self.multi_sessions:
|
|
140
133
|
self.multi_sessions_token = _multi_sessions_ctx.set(True)
|
|
141
134
|
self.commit_on_exit_token = _commit_on_exit_ctx.set(self.commit_on_exit)
|
|
142
|
-
|
|
143
|
-
|
|
135
|
+
else:
|
|
136
|
+
self.token = _session.set(_Session(**self.session_args))
|
|
144
137
|
return type(self)
|
|
145
138
|
|
|
146
139
|
async def __aexit__(self, exc_type, exc_value, traceback):
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
140
|
+
if self.multi_sessions:
|
|
141
|
+
_multi_sessions_ctx.reset(self.multi_sessions_token)
|
|
142
|
+
_commit_on_exit_ctx.reset(self.commit_on_exit_token)
|
|
143
|
+
else:
|
|
144
|
+
session = _session.get()
|
|
145
|
+
try:
|
|
146
|
+
if exc_type is not None:
|
|
147
|
+
await session.rollback()
|
|
148
|
+
elif self.commit_on_exit:
|
|
149
|
+
await session.commit()
|
|
150
|
+
finally:
|
|
151
|
+
await session.close()
|
|
152
|
+
_session.reset(self.token)
|
|
159
153
|
|
|
160
154
|
return SQLAlchemyMiddleware, DBSession
|
|
161
155
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
fastapi_async_sqlalchemy/__init__.py,sha256=Ruw-Q02MYDqljZux5Sq35zVhXhuf8d4ykGr6sOrHKXo,143
|
|
2
|
+
fastapi_async_sqlalchemy/exceptions.py,sha256=dH3xjPE7B6kgq8L3LvxK-MsGZ_ZnW2WH2drLkK2oD-4,887
|
|
3
|
+
fastapi_async_sqlalchemy/middleware.py,sha256=0jrZrrH9YsimOqsx7hFtO-BvKiNLFeDuDcqYLSS7E_g,6577
|
|
4
|
+
fastapi_async_sqlalchemy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
fastapi_async_sqlalchemy-0.7.0.dev3.dist-info/LICENSE,sha256=OhSfEMY0WqZhq41M6mLmkuFloAG7ZJYKfryF2jyxkfY,1108
|
|
6
|
+
fastapi_async_sqlalchemy-0.7.0.dev3.dist-info/METADATA,sha256=rPGtBpw-ksoML8ZVDjstRs49_0alHHZpSlvRbf_9Rw4,6831
|
|
7
|
+
fastapi_async_sqlalchemy-0.7.0.dev3.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
|
8
|
+
fastapi_async_sqlalchemy-0.7.0.dev3.dist-info/top_level.txt,sha256=po-P5Tif35GmAaUR0mgZr5uBwN91iAgszaKI_r4ZTZA,25
|
|
9
|
+
fastapi_async_sqlalchemy-0.7.0.dev3.dist-info/RECORD,,
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
fastapi_async_sqlalchemy/__init__.py,sha256=SssNn_DOQkhXabDQJJdvgRKMvL12CXPZiSqFxl1n1lg,143
|
|
2
|
-
fastapi_async_sqlalchemy/exceptions.py,sha256=dH3xjPE7B6kgq8L3LvxK-MsGZ_ZnW2WH2drLkK2oD-4,887
|
|
3
|
-
fastapi_async_sqlalchemy/middleware.py,sha256=Fk5aAkgqjLH_HWTa-ELlYL3vFlaSlIMyG2xpG7AarDw,6916
|
|
4
|
-
fastapi_async_sqlalchemy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
fastapi_async_sqlalchemy-0.7.0.dev1.dist-info/LICENSE,sha256=OhSfEMY0WqZhq41M6mLmkuFloAG7ZJYKfryF2jyxkfY,1108
|
|
6
|
-
fastapi_async_sqlalchemy-0.7.0.dev1.dist-info/METADATA,sha256=COfeGoIlIPXulpANj8vL4Mtn9rtUerNGQ2G3bD2PanM,6831
|
|
7
|
-
fastapi_async_sqlalchemy-0.7.0.dev1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
|
8
|
-
fastapi_async_sqlalchemy-0.7.0.dev1.dist-info/top_level.txt,sha256=po-P5Tif35GmAaUR0mgZr5uBwN91iAgszaKI_r4ZTZA,25
|
|
9
|
-
fastapi_async_sqlalchemy-0.7.0.dev1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|