reyserver 1.1.52__py3-none-any.whl → 1.1.54__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.

Potentially problematic release.


This version of reyserver might be problematic. Click here for more details.

reyserver/rbase.py CHANGED
@@ -9,11 +9,9 @@
9
9
  """
10
10
 
11
11
 
12
- from typing import Sequence, Literal, NoReturn
13
- from inspect import iscoroutinefunction
14
- from contextlib import asynccontextmanager, _AsyncGeneratorContextManager
12
+ from typing import Literal, NoReturn
15
13
  from http import HTTPStatus
16
- from fastapi import FastAPI, HTTPException, UploadFile as File
14
+ from fastapi import HTTPException, UploadFile as File
17
15
  from fastapi.params import (
18
16
  Depends,
19
17
  Path,
@@ -26,7 +24,7 @@ from fastapi.params import (
26
24
  )
27
25
  from reydb.rconn import DatabaseConnectionAsync
28
26
  from reydb.rorm import DatabaseORMModel, DatabaseORMSessionAsync
29
- from reykit.rbase import CoroutineFunctionSimple, Base, Exit, StaticMeta, ConfigMeta, Singleton, throw
27
+ from reykit.rbase import Base, Exit, StaticMeta, ConfigMeta, Singleton, throw
30
28
 
31
29
  from . import rserver
32
30
 
@@ -259,57 +257,6 @@ class ServerBind(ServerBase, metaclass=StaticMeta):
259
257
  """
260
258
 
261
259
 
262
- def create_lifespan(
263
- before: CoroutineFunctionSimple | Sequence[CoroutineFunctionSimple] | None = None,
264
- after: CoroutineFunctionSimple | Sequence[CoroutineFunctionSimple] | None = None,
265
- ) -> _AsyncGeneratorContextManager[None, None]:
266
- """
267
- Create asynchronous function of lifespan manager.
268
-
269
- Parameters
270
- ----------
271
- before : Execute before server start.
272
- after : Execute after server end.
273
-
274
- Returns
275
- -------
276
- Asynchronous function.
277
- """
278
-
279
- # Parameter.
280
- if before is None:
281
- before = ()
282
- elif iscoroutinefunction(before):
283
- before = (before,)
284
- if after is None:
285
- after = ()
286
- elif iscoroutinefunction(after):
287
- after = (after,)
288
-
289
-
290
- @asynccontextmanager
291
- async def lifespan(app: FastAPI):
292
- """
293
- Server lifespan manager.
294
-
295
- Parameters
296
- ----------
297
- app : Server APP.
298
- """
299
-
300
- # Before.
301
- for task in before:
302
- await task()
303
- yield
304
-
305
- # After.
306
- for task in after:
307
- await after()
308
-
309
-
310
- return lifespan
311
-
312
-
313
260
  def create_depend_db(database: str, mode: Literal['sess', 'conn']) -> Depends:
314
261
  """
315
262
  Create dependencie type of asynchronous database.
reyserver/rserver.py CHANGED
@@ -12,6 +12,7 @@
12
12
  from typing import Literal
13
13
  from collections.abc import Sequence, Callable, Coroutine
14
14
  from inspect import iscoroutinefunction
15
+ from contextlib import asynccontextmanager, _AsyncGeneratorContextManager
15
16
  from uvicorn import run as uvicorn_run
16
17
  from starlette.middleware.base import _StreamingResponse
17
18
  from fastapi import FastAPI, Request
@@ -47,6 +48,7 @@ class Server(ServerBase, Singleton):
47
48
  after: CoroutineFunctionSimple | Sequence[CoroutineFunctionSimple] | None = None,
48
49
  ssl_cert: str | None = None,
49
50
  ssl_key: str | None = None,
51
+ db_warm: bool = False,
50
52
  debug: bool = False
51
53
  ) -> None:
52
54
  """
@@ -61,13 +63,13 @@ class Server(ServerBase, Singleton):
61
63
  after : Execute after server end.
62
64
  ssl_cert : SSL certificate file path.
63
65
  ssl_key : SSL key file path.
66
+ db_warm : Whether database pre create connection to warm all pool.
64
67
  debug : Whether use development mode debug server.
65
68
  """
66
69
 
67
70
  # Parameter.
68
71
  if type(ssl_cert) != type(ssl_key):
69
72
  throw(AssertionError, ssl_cert, ssl_key)
70
- lifespan = Bind.create_lifespan(before, after)
71
73
  if depend is None:
72
74
  depend = ()
73
75
  elif iscoroutinefunction(depend):
@@ -76,6 +78,7 @@ class Server(ServerBase, Singleton):
76
78
  Bind.Depend(task)
77
79
  for task in depend
78
80
  ]
81
+ lifespan = self.__create_lifespan(before, after, db_warm)
79
82
 
80
83
  # Build.
81
84
  ServerConfig.server = self
@@ -111,6 +114,69 @@ class Server(ServerBase, Singleton):
111
114
  'File API store directory path.'
112
115
 
113
116
 
117
+ def __create_lifespan(
118
+ self,
119
+ before: CoroutineFunctionSimple | Sequence[CoroutineFunctionSimple] | None,
120
+ after: CoroutineFunctionSimple | Sequence[CoroutineFunctionSimple] | None,
121
+ db_warm: bool
122
+ ) -> _AsyncGeneratorContextManager[None, None]:
123
+ """
124
+ Create asynchronous function of lifespan manager.
125
+
126
+ Parameters
127
+ ----------
128
+ before : Execute before server start.
129
+ after : Execute after server end.
130
+ db_warm : Whether database pre create connection to warm all pool.
131
+
132
+ Returns
133
+ -------
134
+ Asynchronous function.
135
+ """
136
+
137
+ # Parameter.
138
+ if before is None:
139
+ before = ()
140
+ elif iscoroutinefunction(before):
141
+ before = (before,)
142
+ if after is None:
143
+ after = ()
144
+ elif iscoroutinefunction(after):
145
+ after = (after,)
146
+
147
+
148
+ @asynccontextmanager
149
+ async def lifespan(app: FastAPI):
150
+ """
151
+ Server lifespan manager.
152
+
153
+ Parameters
154
+ ----------
155
+ app : Server APP.
156
+ """
157
+
158
+ # Before.
159
+ for task in before:
160
+ await task()
161
+
162
+ # Databse.
163
+ if db_warm:
164
+ await self.db.warm_all()
165
+
166
+ # Runing.
167
+ yield
168
+
169
+ # After.
170
+ for task in after:
171
+ await after()
172
+
173
+ # Database.
174
+ await self.db.dispose_all()
175
+
176
+
177
+ return lifespan
178
+
179
+
114
180
  def __add_default_middleware(self) -> None:
115
181
  """
116
182
  Add default handle middleware.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reyserver
3
- Version: 1.1.52
3
+ Version: 1.1.54
4
4
  Summary: Backend server method set.
5
5
  Project-URL: homepage, https://github.com/reyxbo/reyserver/
6
6
  Author-email: Rey <reyxbo@163.com>
@@ -1,11 +1,11 @@
1
1
  reyserver/__init__.py,sha256=7GX64p7uI2eetJH9NJ-DTg-8iyQwOsGcviADFJCPxVA,373
2
2
  reyserver/rall.py,sha256=riyDRTUsigco_Bee1H4aZFb8IgvjnxdX9qcnVb9i9mE,270
3
3
  reyserver/rauth.py,sha256=oa6Iwuutcj9eO6RH7DaT-rPn_YqYwKuyHYaBd3lZoZE,11728
4
- reyserver/rbase.py,sha256=xgdLP_O77e-pSrRWm9GVSziPSqEOh2w20cWkF4HBeWo,7042
4
+ reyserver/rbase.py,sha256=jgjAkT1kxzVKB60xfWxZbnQJsehhcTBr24AclTYjc4g,5603
5
5
  reyserver/rclient.py,sha256=IWZ3smyIP0_YJrfSrM8JFCr0FCtN02AyT3hp8YuSsDQ,5103
6
6
  reyserver/rfile.py,sha256=bvuXOYO3UDM1jMiyNzQDz56_0ekZUEIRcfNFAhGgdUY,9010
7
- reyserver/rserver.py,sha256=bfakJGhcHF0CIiAmRyMVOURLbPNCIALGyrnKpf_Yi80,6800
8
- reyserver-1.1.52.dist-info/METADATA,sha256=ujWE6YB95IdJf4nCYtq7FZW2sw0s_TGSeyuEwAjfHW8,1689
9
- reyserver-1.1.52.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
10
- reyserver-1.1.52.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
11
- reyserver-1.1.52.dist-info/RECORD,,
7
+ reyserver/rserver.py,sha256=EDIspT0uWhiWl7uIhRDJtcxRvZG96GaVNWYik7pprz4,8561
8
+ reyserver-1.1.54.dist-info/METADATA,sha256=xajKdcgwZ5ajkYubVO_TXjA1dL1KY6xH_36zokahzbA,1689
9
+ reyserver-1.1.54.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
10
+ reyserver-1.1.54.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
11
+ reyserver-1.1.54.dist-info/RECORD,,