uvicorn 0.30.2__py3-none-any.whl → 0.30.4__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 CHANGED
@@ -1,5 +1,5 @@
1
1
  from uvicorn.config import Config
2
2
  from uvicorn.main import Server, main, run
3
3
 
4
- __version__ = "0.30.2"
4
+ __version__ = "0.30.4"
5
5
  __all__ = ["main", "run", "Config", "Server"]
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]) # pragma: py-darwin
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: py-win32
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
 
@@ -259,11 +259,13 @@ class H11Protocol(asyncio.Protocol):
259
259
  self.transport.resume_reading()
260
260
  self.conn.start_next_cycle()
261
261
  continue
262
+ if self.conn.their_state == h11.MUST_CLOSE:
263
+ break
262
264
  self.cycle.more_body = False
263
265
  self.cycle.message_event.set()
264
266
 
265
267
  def handle_websocket_upgrade(self, event: h11.Request) -> None:
266
- if self.logger.level <= TRACE_LOG_LEVEL:
268
+ if self.logger.level <= TRACE_LOG_LEVEL: # pragma: full coverage
267
269
  prefix = "%s:%d - " % self.client if self.client else ""
268
270
  self.logger.log(TRACE_LOG_LEVEL, "%sUpgrading to WebSocket", prefix)
269
271
 
@@ -333,13 +335,13 @@ class H11Protocol(asyncio.Protocol):
333
335
  """
334
336
  Called by the transport when the write buffer exceeds the high water mark.
335
337
  """
336
- self.flow.pause_writing()
338
+ self.flow.pause_writing() # pragma: full coverage
337
339
 
338
340
  def resume_writing(self) -> None:
339
341
  """
340
342
  Called by the transport when the write buffer drops below the low water mark.
341
343
  """
342
- self.flow.resume_writing()
344
+ self.flow.resume_writing() # pragma: full coverage
343
345
 
344
346
  def timeout_keep_alive_handler(self) -> None:
345
347
  """
@@ -441,10 +443,10 @@ class RequestResponseCycle:
441
443
  message_type = message["type"]
442
444
 
443
445
  if self.flow.write_paused and not self.disconnected:
444
- await self.flow.drain()
446
+ await self.flow.drain() # pragma: full coverage
445
447
 
446
448
  if self.disconnected:
447
- return
449
+ return # pragma: full coverage
448
450
 
449
451
  if not self.response_started:
450
452
  # 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
 
@@ -6,7 +6,7 @@ import urllib.parse
6
6
  from uvicorn._types import WWWScope
7
7
 
8
8
 
9
- class ClientDisconnected(IOError): ...
9
+ class ClientDisconnected(OSError): ...
10
10
 
11
11
 
12
12
  def get_remote_addr(transport: asyncio.Transport) -> tuple[str, int] | None:
@@ -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 # pragma: py-not-win32
46
+ self.is_restarting = False
47
47
  else:
48
- self.should_exit.set() # pragma: py-win32
48
+ self.should_exit.set()
49
49
 
50
50
  def run(self) -> None:
51
51
  self.startup()
@@ -64,7 +64,7 @@ class Process:
64
64
 
65
65
  def is_alive(self, timeout: float = 5) -> bool:
66
66
  if not self.process.is_alive():
67
- return False
67
+ return False # pragma: full coverage
68
68
 
69
69
  return self.ping(timeout)
70
70
 
@@ -171,7 +171,7 @@ class Multiprocess:
171
171
  process.join()
172
172
 
173
173
  if self.should_exit.is_set():
174
- return
174
+ return # pragma: full coverage
175
175
 
176
176
  logger.info(f"Child process [{process.pid}] died")
177
177
  process = Process(self.config, self.target, self.sockets)
@@ -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,12 +1,12 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: uvicorn
3
- Version: 0.30.2
3
+ Version: 0.30.4
4
4
  Summary: The lightning-fast ASGI server.
5
5
  Project-URL: Changelog, https://github.com/encode/uvicorn/blob/master/CHANGELOG.md
6
6
  Project-URL: Funding, https://github.com/sponsors/encode
7
7
  Project-URL: Homepage, https://www.uvicorn.org/
8
8
  Project-URL: Source, https://github.com/encode/uvicorn
9
- Author-email: Tom Christie <tom@tomchristie.com>
9
+ Author-email: Tom Christie <tom@tomchristie.com>, Marcelo Trylesinski <marcelotryle@gmail.com>
10
10
  License-Expression: BSD-3-Clause
11
11
  License-File: LICENSE.md
12
12
  Classifier: Development Status :: 4 - Beta
@@ -1,45 +1,45 @@
1
- uvicorn/__init__.py,sha256=2ihzFcKnoMr_2nkHTi86zdLVYSdvmEdBvx5HIgz8tF8,147
1
+ uvicorn/__init__.py,sha256=rpdfflsXferoONP96Wsez0PjiQj_QjFl7-gh0mruQjM,147
2
2
  uvicorn/__main__.py,sha256=DQizy6nKP0ywhPpnCHgmRDYIMfcqZKVEzNIWQZjqtVQ,62
3
- uvicorn/_subprocess.py,sha256=wc7tS3hmHLX9RHBJchu0ZHjUeQEuXehi3xvQvK4uUTY,2741
3
+ uvicorn/_subprocess.py,sha256=HbfRnsCkXyg7xCWVAWWzXQTeWlvLKfTlIF5wevFBkR4,2766
4
4
  uvicorn/_types.py,sha256=TcUzCyKNq90ZX2Hxa6ce0juF558zLO_AyBB1XijnD2Y,7814
5
- uvicorn/config.py,sha256=gk9sg4XHc1FcUbx9mN56kAfKN4ERMKM_qc3V9qlVPOI,20671
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=Ugv-CHZ1IBEuXXoXOE4J2MjDzPZX3XA4FSqUqvyYclU,16715
8
+ uvicorn/main.py,sha256=jmZOCNq5frbWmlflJpGJ1wpqPxlXTDxcN8bGm2TQfSo,16783
9
9
  uvicorn/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
10
- uvicorn/server.py,sha256=bXpsRamwT2cRoe7u6Nk8Czp_la2sfSnV9V0dva5-gkE,12729
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=VcornZKJoV8yBYgLON3Gd8YKpUxlLlardxy_LJq_PhE,276
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=CT7cYPf1FmmAWxnpKwLYPLPNBM6WxgU2NqYYZrmXPWQ,3040
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=kBwTa7T6Ed1-tSpNfLWhJjxhTbH163GqPwwAcXshPVc,1849
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=lwEBY3zsxJrxykud6OB-jQQd9rUQkFXDmqQyPGBm5ag,1626
29
- uvicorn/protocols/http/h11_impl.py,sha256=TycBaEdfs74j2t-EqsOHpd1s0RNDx6wYpgIaQVd9zm8,20330
30
- uvicorn/protocols/http/httptools_impl.py,sha256=ptIkbeTmmqz9yB1NHVFszp2nHeQxjU10ZYdzdo_i6CA,21300
28
+ uvicorn/protocols/http/flow_control.py,sha256=050WVg31EvPOkHwynCoMP1zXFl_vO3U4durlc5vyp4U,1701
29
+ uvicorn/protocols/http/h11_impl.py,sha256=ZyFUBNCK0FPHU1RpNW6ZEwaK02N1AzsGKYJUV8WfB00,20541
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=oJMi-WfygYHHt_CK0MstaXwicfNnQ2NMCrjsL_NJzbw,15479
34
- uvicorn/protocols/websockets/wsproto_impl.py,sha256=GuEtZcUFiPIGhXZHV9ZlIZq3Kva3izqv-58cVkPh-58,15241
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=u83LepHT28QFH84wwsxJypwBKO1apG4c4WziPMfOqmE,3850
37
- uvicorn/supervisors/multiprocess.py,sha256=lvaD0CYC8P5H8tABc0G3dmcWgw_WnUQLUfZYlmxHnkI,7457
36
+ uvicorn/supervisors/basereload.py,sha256=Hxezjgt_HXkOPVj-hJGH7uj0bZ3EhmwsmaOBc63ySoM,3831
37
+ uvicorn/supervisors/multiprocess.py,sha256=Opt0XvOUj1DIMXYwb4OlkJZxeh_RjweFnTmDPYItONw,7507
38
38
  uvicorn/supervisors/statreload.py,sha256=gc-HUB44f811PvxD_ZIEQYenM7mWmhQQjYg7KKQ1c5o,1542
39
- uvicorn/supervisors/watchfilesreload.py,sha256=RMhWgInlOr0MJB0RvmW50RZY1ls9Kp9VT3eaLjdRTpw,2935
39
+ uvicorn/supervisors/watchfilesreload.py,sha256=41FGNMXPKrKvPr-5O8yRWg43l6OCBtapt39M-gpdk0E,3010
40
40
  uvicorn/supervisors/watchgodreload.py,sha256=kd-gOvp14ArTNIc206Nt5CEjZZ4NP2UmMVYE7571yRQ,5486
41
- uvicorn-0.30.2.dist-info/METADATA,sha256=UDBfbAXOiHDZnqSivWt_EDhuBi1bvetAXusgzyhOSAc,6523
42
- uvicorn-0.30.2.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
43
- uvicorn-0.30.2.dist-info/entry_points.txt,sha256=FW1w-hkc9QgwaGoovMvm0ZY73w_NcycWdGAUfDsNGxw,46
44
- uvicorn-0.30.2.dist-info/licenses/LICENSE.md,sha256=7-Gs8-YvuZwoiw7HPlp3O3Jo70Mg_nV-qZQhTktjw3E,1526
45
- uvicorn-0.30.2.dist-info/RECORD,,
41
+ uvicorn-0.30.4.dist-info/METADATA,sha256=ri14-OWxxExjp9ECGT-H36tsruF2yUqMH5pqH6Oz-c8,6569
42
+ uvicorn-0.30.4.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
43
+ uvicorn-0.30.4.dist-info/entry_points.txt,sha256=FW1w-hkc9QgwaGoovMvm0ZY73w_NcycWdGAUfDsNGxw,46
44
+ uvicorn-0.30.4.dist-info/licenses/LICENSE.md,sha256=7-Gs8-YvuZwoiw7HPlp3O3Jo70Mg_nV-qZQhTktjw3E,1526
45
+ uvicorn-0.30.4.dist-info/RECORD,,