uvicorn 0.30.2__py3-none-any.whl → 0.30.3__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.
- uvicorn/__init__.py +1 -1
- uvicorn/_subprocess.py +1 -1
- uvicorn/config.py +9 -9
- uvicorn/loops/asyncio.py +1 -1
- uvicorn/main.py +2 -0
- uvicorn/middleware/proxy_headers.py +1 -1
- uvicorn/protocols/http/flow_control.py +3 -3
- uvicorn/protocols/http/h11_impl.py +5 -5
- uvicorn/protocols/http/httptools_impl.py +7 -7
- uvicorn/protocols/utils.py +1 -1
- uvicorn/protocols/websockets/websockets_impl.py +1 -1
- uvicorn/protocols/websockets/wsproto_impl.py +4 -4
- uvicorn/server.py +6 -6
- uvicorn/supervisors/basereload.py +3 -3
- uvicorn/supervisors/multiprocess.py +1 -1
- uvicorn/supervisors/watchfilesreload.py +3 -3
- {uvicorn-0.30.2.dist-info → uvicorn-0.30.3.dist-info}/METADATA +1 -1
- {uvicorn-0.30.2.dist-info → uvicorn-0.30.3.dist-info}/RECORD +21 -21
- {uvicorn-0.30.2.dist-info → uvicorn-0.30.3.dist-info}/WHEEL +0 -0
- {uvicorn-0.30.2.dist-info → uvicorn-0.30.3.dist-info}/entry_points.txt +0 -0
- {uvicorn-0.30.2.dist-info → uvicorn-0.30.3.dist-info}/licenses/LICENSE.md +0 -0
uvicorn/__init__.py
CHANGED
uvicorn/_subprocess.py
CHANGED
@@ -70,7 +70,7 @@ def subprocess_started(
|
|
70
70
|
"""
|
71
71
|
# Re-open stdin.
|
72
72
|
if stdin_fileno is not None:
|
73
|
-
sys.stdin = os.fdopen(stdin_fileno)
|
73
|
+
sys.stdin = os.fdopen(stdin_fileno) # pragma: full coverage
|
74
74
|
|
75
75
|
# Logging needs to be setup again for each child.
|
76
76
|
config.configure_logging()
|
uvicorn/config.py
CHANGED
@@ -124,7 +124,7 @@ def is_dir(path: Path) -> bool:
|
|
124
124
|
if not path.is_absolute():
|
125
125
|
path = path.resolve()
|
126
126
|
return path.is_dir()
|
127
|
-
except OSError:
|
127
|
+
except OSError: # pragma: full coverage
|
128
128
|
return False
|
129
129
|
|
130
130
|
|
@@ -153,9 +153,9 @@ def resolve_reload_patterns(patterns_list: list[str], directories_list: list[str
|
|
153
153
|
|
154
154
|
children = []
|
155
155
|
for j in range(len(directories)):
|
156
|
-
for k in range(j + 1, len(directories)):
|
156
|
+
for k in range(j + 1, len(directories)): # pragma: full coverage
|
157
157
|
if directories[j] in directories[k].parents:
|
158
|
-
children.append(directories[k])
|
158
|
+
children.append(directories[k])
|
159
159
|
elif directories[k] in directories[j].parents:
|
160
160
|
children.append(directories[j])
|
161
161
|
|
@@ -298,12 +298,12 @@ class Config:
|
|
298
298
|
if directory == reload_directory or directory in reload_directory.parents:
|
299
299
|
try:
|
300
300
|
self.reload_dirs.remove(reload_directory)
|
301
|
-
except ValueError:
|
301
|
+
except ValueError: # pragma: full coverage
|
302
302
|
pass
|
303
303
|
|
304
304
|
for pattern in self.reload_excludes:
|
305
305
|
if pattern in self.reload_includes:
|
306
|
-
self.reload_includes.remove(pattern)
|
306
|
+
self.reload_includes.remove(pattern) # pragma: full coverage
|
307
307
|
|
308
308
|
if not self.reload_dirs:
|
309
309
|
if reload_dirs:
|
@@ -332,7 +332,7 @@ class Config:
|
|
332
332
|
if forwarded_allow_ips is None:
|
333
333
|
self.forwarded_allow_ips = os.environ.get("FORWARDED_ALLOW_IPS", "127.0.0.1")
|
334
334
|
else:
|
335
|
-
self.forwarded_allow_ips = forwarded_allow_ips
|
335
|
+
self.forwarded_allow_ips = forwarded_allow_ips # pragma: full coverage
|
336
336
|
|
337
337
|
if self.reload and self.workers > 1:
|
338
338
|
logger.warning('"workers" flag is ignored when reloading is enabled.')
|
@@ -485,7 +485,7 @@ class Config:
|
|
485
485
|
sock.bind(path)
|
486
486
|
uds_perms = 0o666
|
487
487
|
os.chmod(self.uds, uds_perms)
|
488
|
-
except OSError as exc:
|
488
|
+
except OSError as exc: # pragma: full coverage
|
489
489
|
logger.error(exc)
|
490
490
|
sys.exit(1)
|
491
491
|
|
@@ -503,7 +503,7 @@ class Config:
|
|
503
503
|
family = socket.AF_INET
|
504
504
|
addr_format = "%s://%s:%d"
|
505
505
|
|
506
|
-
if self.host and ":" in self.host: # pragma:
|
506
|
+
if self.host and ":" in self.host: # pragma: full coverage
|
507
507
|
# It's an IPv6 address.
|
508
508
|
family = socket.AF_INET6
|
509
509
|
addr_format = "%s://[%s]:%d"
|
@@ -512,7 +512,7 @@ class Config:
|
|
512
512
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
513
513
|
try:
|
514
514
|
sock.bind((self.host, self.port))
|
515
|
-
except OSError as exc:
|
515
|
+
except OSError as exc: # pragma: full coverage
|
516
516
|
logger.error(exc)
|
517
517
|
sys.exit(1)
|
518
518
|
|
uvicorn/loops/asyncio.py
CHANGED
@@ -7,4 +7,4 @@ logger = logging.getLogger("uvicorn.error")
|
|
7
7
|
|
8
8
|
def asyncio_setup(use_subprocess: bool = False) -> None:
|
9
9
|
if sys.platform == "win32" and use_subprocess:
|
10
|
-
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
|
10
|
+
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) # pragma: full coverage
|
uvicorn/main.py
CHANGED
@@ -575,6 +575,8 @@ def run(
|
|
575
575
|
Multiprocess(config, target=server.run, sockets=[sock]).run()
|
576
576
|
else:
|
577
577
|
server.run()
|
578
|
+
except KeyboardInterrupt:
|
579
|
+
pass # pragma: full coverage
|
578
580
|
finally:
|
579
581
|
if config.uds and os.path.exists(config.uds):
|
580
582
|
os.remove(config.uds) # pragma: py-win32
|
@@ -37,7 +37,7 @@ class ProxyHeadersMiddleware:
|
|
37
37
|
if host not in self.trusted_hosts:
|
38
38
|
return host
|
39
39
|
|
40
|
-
return None
|
40
|
+
return None # pragma: full coverage
|
41
41
|
|
42
42
|
async def __call__(self, scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable) -> None:
|
43
43
|
if scope["type"] in ("http", "websocket"):
|
@@ -16,7 +16,7 @@ class FlowControl:
|
|
16
16
|
self._is_writable_event.set()
|
17
17
|
|
18
18
|
async def drain(self) -> None:
|
19
|
-
await self._is_writable_event.wait()
|
19
|
+
await self._is_writable_event.wait() # pragma: full coverage
|
20
20
|
|
21
21
|
def pause_reading(self) -> None:
|
22
22
|
if not self.read_paused:
|
@@ -29,12 +29,12 @@ class FlowControl:
|
|
29
29
|
self._transport.resume_reading()
|
30
30
|
|
31
31
|
def pause_writing(self) -> None:
|
32
|
-
if not self.write_paused:
|
32
|
+
if not self.write_paused: # pragma: full coverage
|
33
33
|
self.write_paused = True
|
34
34
|
self._is_writable_event.clear()
|
35
35
|
|
36
36
|
def resume_writing(self) -> None:
|
37
|
-
if self.write_paused:
|
37
|
+
if self.write_paused: # pragma: full coverage
|
38
38
|
self.write_paused = False
|
39
39
|
self._is_writable_event.set()
|
40
40
|
|
@@ -263,7 +263,7 @@ class H11Protocol(asyncio.Protocol):
|
|
263
263
|
self.cycle.message_event.set()
|
264
264
|
|
265
265
|
def handle_websocket_upgrade(self, event: h11.Request) -> None:
|
266
|
-
if self.logger.level <= TRACE_LOG_LEVEL:
|
266
|
+
if self.logger.level <= TRACE_LOG_LEVEL: # pragma: full coverage
|
267
267
|
prefix = "%s:%d - " % self.client if self.client else ""
|
268
268
|
self.logger.log(TRACE_LOG_LEVEL, "%sUpgrading to WebSocket", prefix)
|
269
269
|
|
@@ -333,13 +333,13 @@ class H11Protocol(asyncio.Protocol):
|
|
333
333
|
"""
|
334
334
|
Called by the transport when the write buffer exceeds the high water mark.
|
335
335
|
"""
|
336
|
-
self.flow.pause_writing()
|
336
|
+
self.flow.pause_writing() # pragma: full coverage
|
337
337
|
|
338
338
|
def resume_writing(self) -> None:
|
339
339
|
"""
|
340
340
|
Called by the transport when the write buffer drops below the low water mark.
|
341
341
|
"""
|
342
|
-
self.flow.resume_writing()
|
342
|
+
self.flow.resume_writing() # pragma: full coverage
|
343
343
|
|
344
344
|
def timeout_keep_alive_handler(self) -> None:
|
345
345
|
"""
|
@@ -441,10 +441,10 @@ class RequestResponseCycle:
|
|
441
441
|
message_type = message["type"]
|
442
442
|
|
443
443
|
if self.flow.write_paused and not self.disconnected:
|
444
|
-
await self.flow.drain()
|
444
|
+
await self.flow.drain() # pragma: full coverage
|
445
445
|
|
446
446
|
if self.disconnected:
|
447
|
-
return
|
447
|
+
return # pragma: full coverage
|
448
448
|
|
449
449
|
if not self.response_started:
|
450
450
|
# Sending response status line and headers
|
@@ -139,7 +139,7 @@ class HttpToolsProtocol(asyncio.Protocol):
|
|
139
139
|
upgrade = value.lower()
|
140
140
|
if b"upgrade" in connection:
|
141
141
|
return upgrade
|
142
|
-
return None
|
142
|
+
return None # pragma: full coverage
|
143
143
|
|
144
144
|
def _should_upgrade_to_ws(self, upgrade: bytes | None) -> bool:
|
145
145
|
if upgrade == b"websocket" and self.ws_protocol_class is not None:
|
@@ -193,7 +193,7 @@ class HttpToolsProtocol(asyncio.Protocol):
|
|
193
193
|
def send_400_response(self, msg: str) -> None:
|
194
194
|
content = [STATUS_LINE[400]]
|
195
195
|
for name, value in self.server_state.default_headers:
|
196
|
-
content.extend([name, b": ", value, b"\r\n"])
|
196
|
+
content.extend([name, b": ", value, b"\r\n"]) # pragma: full coverage
|
197
197
|
content.extend(
|
198
198
|
[
|
199
199
|
b"content-type: text/plain; charset=utf-8\r\n",
|
@@ -336,13 +336,13 @@ class HttpToolsProtocol(asyncio.Protocol):
|
|
336
336
|
"""
|
337
337
|
Called by the transport when the write buffer exceeds the high water mark.
|
338
338
|
"""
|
339
|
-
self.flow.pause_writing()
|
339
|
+
self.flow.pause_writing() # pragma: full coverage
|
340
340
|
|
341
341
|
def resume_writing(self) -> None:
|
342
342
|
"""
|
343
343
|
Called by the transport when the write buffer drops below the low water mark.
|
344
344
|
"""
|
345
|
-
self.flow.resume_writing()
|
345
|
+
self.flow.resume_writing() # pragma: full coverage
|
346
346
|
|
347
347
|
def timeout_keep_alive_handler(self) -> None:
|
348
348
|
"""
|
@@ -441,10 +441,10 @@ class RequestResponseCycle:
|
|
441
441
|
message_type = message["type"]
|
442
442
|
|
443
443
|
if self.flow.write_paused and not self.disconnected:
|
444
|
-
await self.flow.drain()
|
444
|
+
await self.flow.drain() # pragma: full coverage
|
445
445
|
|
446
446
|
if self.disconnected:
|
447
|
-
return
|
447
|
+
return # pragma: full coverage
|
448
448
|
|
449
449
|
if not self.response_started:
|
450
450
|
# Sending response status line and headers
|
@@ -477,7 +477,7 @@ class RequestResponseCycle:
|
|
477
477
|
|
478
478
|
for name, value in headers:
|
479
479
|
if HEADER_RE.search(name):
|
480
|
-
raise RuntimeError("Invalid HTTP header name.")
|
480
|
+
raise RuntimeError("Invalid HTTP header name.") # pragma: full coverage
|
481
481
|
if HEADER_VALUE_RE.search(value):
|
482
482
|
raise RuntimeError("Invalid HTTP header value.")
|
483
483
|
|
uvicorn/protocols/utils.py
CHANGED
@@ -242,7 +242,7 @@ class WebSocketProtocol(WebSocketServerProtocol):
|
|
242
242
|
"""
|
243
243
|
try:
|
244
244
|
result = await self.app(self.scope, self.asgi_receive, self.asgi_send) # type: ignore[func-returns-value]
|
245
|
-
except ClientDisconnected:
|
245
|
+
except ClientDisconnected: # pragma: full coverage
|
246
246
|
self.closed_event.set()
|
247
247
|
self.transport.close()
|
248
248
|
except BaseException:
|
@@ -44,7 +44,7 @@ class WSProtocol(asyncio.Protocol):
|
|
44
44
|
_loop: asyncio.AbstractEventLoop | None = None,
|
45
45
|
) -> None:
|
46
46
|
if not config.loaded:
|
47
|
-
config.load()
|
47
|
+
config.load() # pragma: full coverage
|
48
48
|
|
49
49
|
self.config = config
|
50
50
|
self.app = cast(ASGI3Application, config.loaded_app)
|
@@ -140,13 +140,13 @@ class WSProtocol(asyncio.Protocol):
|
|
140
140
|
"""
|
141
141
|
Called by the transport when the write buffer exceeds the high water mark.
|
142
142
|
"""
|
143
|
-
self.writable.clear()
|
143
|
+
self.writable.clear() # pragma: full coverage
|
144
144
|
|
145
145
|
def resume_writing(self) -> None:
|
146
146
|
"""
|
147
147
|
Called by the transport when the write buffer drops below the low water mark.
|
148
148
|
"""
|
149
|
-
self.writable.set()
|
149
|
+
self.writable.set() # pragma: full coverage
|
150
150
|
|
151
151
|
def shutdown(self) -> None:
|
152
152
|
if self.handshake_complete:
|
@@ -233,7 +233,7 @@ class WSProtocol(asyncio.Protocol):
|
|
233
233
|
try:
|
234
234
|
result = await self.app(self.scope, self.receive, self.send) # type: ignore[func-returns-value]
|
235
235
|
except ClientDisconnected:
|
236
|
-
self.transport.close()
|
236
|
+
self.transport.close() # pragma: full coverage
|
237
237
|
except BaseException:
|
238
238
|
self.logger.exception("Exception in ASGI application\n")
|
239
239
|
self.send_500_response()
|
uvicorn/server.py
CHANGED
@@ -112,7 +112,7 @@ class Server:
|
|
112
112
|
loop = asyncio.get_running_loop()
|
113
113
|
|
114
114
|
listeners: Sequence[socket.SocketType]
|
115
|
-
if sockets is not None:
|
115
|
+
if sockets is not None: # pragma: full coverage
|
116
116
|
# Explicitly passed a list of open sockets.
|
117
117
|
# We use this when the server is run from a Gunicorn worker.
|
118
118
|
|
@@ -147,7 +147,7 @@ class Server:
|
|
147
147
|
# Create a socket using UNIX domain socket.
|
148
148
|
uds_perms = 0o666
|
149
149
|
if os.path.exists(config.uds):
|
150
|
-
uds_perms = os.stat(config.uds).st_mode
|
150
|
+
uds_perms = os.stat(config.uds).st_mode # pragma: full coverage
|
151
151
|
server = await loop.create_unix_server(
|
152
152
|
create_protocol, path=config.uds, ssl=config.ssl, backlog=config.backlog
|
153
153
|
)
|
@@ -180,7 +180,7 @@ class Server:
|
|
180
180
|
else:
|
181
181
|
# We're most likely running multiple workers, so a message has already been
|
182
182
|
# logged by `config.bind_socket()`.
|
183
|
-
pass
|
183
|
+
pass # pragma: full coverage
|
184
184
|
|
185
185
|
self.started = True
|
186
186
|
|
@@ -243,7 +243,7 @@ class Server:
|
|
243
243
|
|
244
244
|
# Callback to `callback_notify` once every `timeout_notify` seconds.
|
245
245
|
if self.config.callback_notify is not None:
|
246
|
-
if current_time - self.last_notified > self.config.timeout_notify:
|
246
|
+
if current_time - self.last_notified > self.config.timeout_notify: # pragma: full coverage
|
247
247
|
self.last_notified = current_time
|
248
248
|
await self.config.callback_notify()
|
249
249
|
|
@@ -261,7 +261,7 @@ class Server:
|
|
261
261
|
for server in self.servers:
|
262
262
|
server.close()
|
263
263
|
for sock in sockets or []:
|
264
|
-
sock.close()
|
264
|
+
sock.close() # pragma: full coverage
|
265
265
|
|
266
266
|
# Request shutdown on all existing connections.
|
267
267
|
for connection in list(self.server_state.connections):
|
@@ -330,6 +330,6 @@ class Server:
|
|
330
330
|
def handle_exit(self, sig: int, frame: FrameType | None) -> None:
|
331
331
|
self._captured_signals.append(sig)
|
332
332
|
if self.should_exit and sig == signal.SIGINT:
|
333
|
-
self.force_exit = True
|
333
|
+
self.force_exit = True # pragma: full coverage
|
334
334
|
else:
|
335
335
|
self.should_exit = True
|
@@ -38,14 +38,14 @@ class BaseReload:
|
|
38
38
|
self.is_restarting = False
|
39
39
|
self.reloader_name: str | None = None
|
40
40
|
|
41
|
-
def signal_handler(self, sig: int, frame: FrameType | None) -> None:
|
41
|
+
def signal_handler(self, sig: int, frame: FrameType | None) -> None: # pragma: full coverage
|
42
42
|
"""
|
43
43
|
A signal handler that is registered with the parent process.
|
44
44
|
"""
|
45
45
|
if sys.platform == "win32" and self.is_restarting:
|
46
|
-
self.is_restarting = False
|
46
|
+
self.is_restarting = False
|
47
47
|
else:
|
48
|
-
self.should_exit.set()
|
48
|
+
self.should_exit.set()
|
49
49
|
|
50
50
|
def run(self) -> None:
|
51
51
|
self.startup()
|
@@ -31,14 +31,14 @@ class FileFilter:
|
|
31
31
|
if is_dir:
|
32
32
|
self.exclude_dirs.append(p)
|
33
33
|
else:
|
34
|
-
self.excludes.append(e)
|
34
|
+
self.excludes.append(e) # pragma: full coverage
|
35
35
|
self.excludes = list(set(self.excludes))
|
36
36
|
|
37
37
|
def __call__(self, path: Path) -> bool:
|
38
38
|
for include_pattern in self.includes:
|
39
39
|
if path.match(include_pattern):
|
40
40
|
if str(path).endswith(include_pattern):
|
41
|
-
return True
|
41
|
+
return True # pragma: full coverage
|
42
42
|
|
43
43
|
for exclude_dir in self.exclude_dirs:
|
44
44
|
if exclude_dir in path.parents:
|
@@ -46,7 +46,7 @@ class FileFilter:
|
|
46
46
|
|
47
47
|
for exclude_pattern in self.excludes:
|
48
48
|
if path.match(exclude_pattern):
|
49
|
-
return False
|
49
|
+
return False # pragma: full coverage
|
50
50
|
|
51
51
|
return True
|
52
52
|
return False
|
@@ -1,45 +1,45 @@
|
|
1
|
-
uvicorn/__init__.py,sha256=
|
1
|
+
uvicorn/__init__.py,sha256=e1oczX6mmSzxo_T3Nq7hvSVPBfapWeqYrHnqMbU9qrc,147
|
2
2
|
uvicorn/__main__.py,sha256=DQizy6nKP0ywhPpnCHgmRDYIMfcqZKVEzNIWQZjqtVQ,62
|
3
|
-
uvicorn/_subprocess.py,sha256=
|
3
|
+
uvicorn/_subprocess.py,sha256=HbfRnsCkXyg7xCWVAWWzXQTeWlvLKfTlIF5wevFBkR4,2766
|
4
4
|
uvicorn/_types.py,sha256=TcUzCyKNq90ZX2Hxa6ce0juF558zLO_AyBB1XijnD2Y,7814
|
5
|
-
uvicorn/config.py,sha256=
|
5
|
+
uvicorn/config.py,sha256=4PZiIBMV8Bu8pNq63-P3pv5ynyEGz-K0aVoC98Y5hrQ,20830
|
6
6
|
uvicorn/importer.py,sha256=nRt0QQ3qpi264-n_mR0l55C2ddM8nowTNzT1jsWaam8,1128
|
7
7
|
uvicorn/logging.py,sha256=sg4D9lHaW_kKQj_kmP-bolbChjKfhBuihktlWp8RjSI,4236
|
8
|
-
uvicorn/main.py,sha256=
|
8
|
+
uvicorn/main.py,sha256=jmZOCNq5frbWmlflJpGJ1wpqPxlXTDxcN8bGm2TQfSo,16783
|
9
9
|
uvicorn/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
10
|
-
uvicorn/server.py,sha256=
|
10
|
+
uvicorn/server.py,sha256=pIpMlW1WMWxarhM3wuZrffX0OcTEKoZXA82oY_M25d8,12879
|
11
11
|
uvicorn/workers.py,sha256=DukTKlrCyyvWVHbJWBJflIV2yUe-q6KaGdrEwLrNmyc,3893
|
12
12
|
uvicorn/lifespan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
uvicorn/lifespan/off.py,sha256=nfI6qHAUo_8-BEXMBKoHQ9wUbsXrPaXLCbDSS0vKSr8,332
|
14
14
|
uvicorn/lifespan/on.py,sha256=1KYuFNNyQONIjtEHhKZAJp-OOokIyjj74wpGCGBv4lk,5184
|
15
15
|
uvicorn/loops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
|
-
uvicorn/loops/asyncio.py,sha256=
|
16
|
+
uvicorn/loops/asyncio.py,sha256=qPnQLT2htZkcGG_ncnTyrSH38jEkqjg8guwP0lA146A,301
|
17
17
|
uvicorn/loops/auto.py,sha256=BWVq18ce9SoFTo3z5zNW2IU2850u2tRrc6WyK7idsdI,400
|
18
18
|
uvicorn/loops/uvloop.py,sha256=K4QybYVxtK9C2emDhDPUCkBXR4XMT5Ofv9BPFPoX0ok,148
|
19
19
|
uvicorn/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
20
20
|
uvicorn/middleware/asgi2.py,sha256=YQrQNm3RehFts3mzk3k4yw8aD8Egtj0tRS3N45YkQa0,394
|
21
21
|
uvicorn/middleware/message_logger.py,sha256=IHEZUSnFNaMFUFdwtZO3AuFATnYcSor-gVtOjbCzt8M,2859
|
22
|
-
uvicorn/middleware/proxy_headers.py,sha256=
|
22
|
+
uvicorn/middleware/proxy_headers.py,sha256=McSfCWvhMEFOTkUbQWgnt9QCBIAY9RfFSaEZboBbAYg,3065
|
23
23
|
uvicorn/middleware/wsgi.py,sha256=TBeG4W_gEmWddbGfWyxdzJ0IDaWWkJZyF8eIp-1fv0U,7111
|
24
24
|
uvicorn/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
25
|
-
uvicorn/protocols/utils.py,sha256=
|
25
|
+
uvicorn/protocols/utils.py,sha256=rCjYLd4_uwPeZkbRXQ6beCfxyI_oYpvJCwz3jEGNOiE,1849
|
26
26
|
uvicorn/protocols/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
27
|
uvicorn/protocols/http/auto.py,sha256=YfXGyzWTaaE2p_jkTPWrJCXsxEaQnC3NK0-G7Wgmnls,403
|
28
|
-
uvicorn/protocols/http/flow_control.py,sha256=
|
29
|
-
uvicorn/protocols/http/h11_impl.py,sha256=
|
30
|
-
uvicorn/protocols/http/httptools_impl.py,sha256=
|
28
|
+
uvicorn/protocols/http/flow_control.py,sha256=050WVg31EvPOkHwynCoMP1zXFl_vO3U4durlc5vyp4U,1701
|
29
|
+
uvicorn/protocols/http/h11_impl.py,sha256=znrnVtyyVdaX0RCOSbE0aWQhZn5xd6Bp-SM_H7NZ0m4,20455
|
30
|
+
uvicorn/protocols/http/httptools_impl.py,sha256=IFxanBZZDlTePYKJ4qV3-L8iVSfxT8wh93FePcroAVY,21475
|
31
31
|
uvicorn/protocols/websockets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
32
32
|
uvicorn/protocols/websockets/auto.py,sha256=kNP-h07ZzjA9dKRUd7MNO0J7xhRJ5xVBfit7wCbdB0A,574
|
33
|
-
uvicorn/protocols/websockets/websockets_impl.py,sha256=
|
34
|
-
uvicorn/protocols/websockets/wsproto_impl.py,sha256=
|
33
|
+
uvicorn/protocols/websockets/websockets_impl.py,sha256=59SLT1Q2sXnpbfxdk5e2SDTJPjrxOvqsYQOHxxCjCP4,15504
|
34
|
+
uvicorn/protocols/websockets/wsproto_impl.py,sha256=haJEXK82Ldu8_hz4NDxQ0KpPXa9vOi6pG6iDLoBDKjs,15341
|
35
35
|
uvicorn/supervisors/__init__.py,sha256=UVJYW3RVHMDSgUytToyAgGyd9NUQVqbNpVrQrvm4Tpc,700
|
36
|
-
uvicorn/supervisors/basereload.py,sha256=
|
37
|
-
uvicorn/supervisors/multiprocess.py,sha256=
|
36
|
+
uvicorn/supervisors/basereload.py,sha256=Hxezjgt_HXkOPVj-hJGH7uj0bZ3EhmwsmaOBc63ySoM,3831
|
37
|
+
uvicorn/supervisors/multiprocess.py,sha256=a2OepqXa2aqSMKUbuq6A144YY6gZQizFOnSgyAnzFYA,7482
|
38
38
|
uvicorn/supervisors/statreload.py,sha256=gc-HUB44f811PvxD_ZIEQYenM7mWmhQQjYg7KKQ1c5o,1542
|
39
|
-
uvicorn/supervisors/watchfilesreload.py,sha256=
|
39
|
+
uvicorn/supervisors/watchfilesreload.py,sha256=41FGNMXPKrKvPr-5O8yRWg43l6OCBtapt39M-gpdk0E,3010
|
40
40
|
uvicorn/supervisors/watchgodreload.py,sha256=kd-gOvp14ArTNIc206Nt5CEjZZ4NP2UmMVYE7571yRQ,5486
|
41
|
-
uvicorn-0.30.
|
42
|
-
uvicorn-0.30.
|
43
|
-
uvicorn-0.30.
|
44
|
-
uvicorn-0.30.
|
45
|
-
uvicorn-0.30.
|
41
|
+
uvicorn-0.30.3.dist-info/METADATA,sha256=pHV3i0fPV0ohq74XENdQcjX7d9dlgvF1weq9w4nDJbY,6523
|
42
|
+
uvicorn-0.30.3.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
43
|
+
uvicorn-0.30.3.dist-info/entry_points.txt,sha256=FW1w-hkc9QgwaGoovMvm0ZY73w_NcycWdGAUfDsNGxw,46
|
44
|
+
uvicorn-0.30.3.dist-info/licenses/LICENSE.md,sha256=7-Gs8-YvuZwoiw7HPlp3O3Jo70Mg_nV-qZQhTktjw3E,1526
|
45
|
+
uvicorn-0.30.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|