uvicorn 0.32.0__tar.gz → 0.32.1__tar.gz
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-0.32.0 → uvicorn-0.32.1}/PKG-INFO +3 -4
- {uvicorn-0.32.0 → uvicorn-0.32.1}/pyproject.toml +1 -1
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/protocols/test_http.py +2 -2
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/__init__.py +1 -1
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/h11_impl.py +1 -4
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/httptools_impl.py +9 -1
- {uvicorn-0.32.0 → uvicorn-0.32.1}/.gitignore +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/LICENSE.md +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/README.md +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/requirements.txt +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/conftest.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/circular_import_a.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/circular_import_b.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/raise_import_error.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/test_importer.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/test_logging.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/test_message_logger.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/test_proxy_headers.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/test_wsgi.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/protocols/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/protocols/test_utils.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/protocols/test_websocket.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/response.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/supervisors/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/supervisors/test_multiprocess.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/supervisors/test_reload.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/supervisors/test_signal.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_auto_detection.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_cli.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_config.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_default_headers.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_lifespan.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_main.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_server.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_ssl.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_subprocess.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/utils.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/__main__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/_subprocess.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/_types.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/config.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/importer.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/lifespan/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/lifespan/off.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/lifespan/on.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/logging.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/loops/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/loops/asyncio.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/loops/auto.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/loops/uvloop.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/main.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/asgi2.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/message_logger.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/proxy_headers.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/wsgi.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/auto.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/flow_control.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/utils.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/websockets/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/websockets/auto.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/websockets/websockets_impl.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/websockets/wsproto_impl.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/py.typed +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/server.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/__init__.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/basereload.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/multiprocess.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/statreload.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/watchfilesreload.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/watchgodreload.py +0 -0
- {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/workers.py +0 -0
@@ -1,14 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: uvicorn
|
3
|
-
Version: 0.32.
|
3
|
+
Version: 0.32.1
|
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
9
|
Author-email: Tom Christie <tom@tomchristie.com>, Marcelo Trylesinski <marcelotryle@gmail.com>
|
10
|
-
License
|
11
|
-
License-File: LICENSE.md
|
10
|
+
License: BSD-3-Clause
|
12
11
|
Classifier: Development Status :: 4 - Beta
|
13
12
|
Classifier: Environment :: Web Environment
|
14
13
|
Classifier: Intended Audience :: Developers
|
@@ -30,7 +29,7 @@ Requires-Dist: h11>=0.8
|
|
30
29
|
Requires-Dist: typing-extensions>=4.0; python_version < '3.11'
|
31
30
|
Provides-Extra: standard
|
32
31
|
Requires-Dist: colorama>=0.4; (sys_platform == 'win32') and extra == 'standard'
|
33
|
-
Requires-Dist: httptools>=0.
|
32
|
+
Requires-Dist: httptools>=0.6.3; extra == 'standard'
|
34
33
|
Requires-Dist: python-dotenv>=0.13; extra == 'standard'
|
35
34
|
Requires-Dist: pyyaml>=5.1; extra == 'standard'
|
36
35
|
Requires-Dist: uvloop!=0.15.0,!=0.15.1,>=0.14.0; (sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')) and extra == 'standard'
|
@@ -39,7 +39,7 @@ dependencies = [
|
|
39
39
|
[project.optional-dependencies]
|
40
40
|
standard = [
|
41
41
|
"colorama>=0.4;sys_platform == 'win32'",
|
42
|
-
"httptools>=0.
|
42
|
+
"httptools>=0.6.3",
|
43
43
|
"python-dotenv>=0.13",
|
44
44
|
"PyYAML>=5.1",
|
45
45
|
"uvloop>=0.14.0,!=0.15.0,!=0.15.1; sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')",
|
@@ -860,8 +860,8 @@ def asgi2app(scope: Scope):
|
|
860
860
|
@pytest.mark.parametrize(
|
861
861
|
"asgi2or3_app, expected_scopes",
|
862
862
|
[
|
863
|
-
(asgi3app, {"version": "3.0", "spec_version": "2.
|
864
|
-
(asgi2app, {"version": "2.0", "spec_version": "2.
|
863
|
+
(asgi3app, {"version": "3.0", "spec_version": "2.3"}),
|
864
|
+
(asgi2app, {"version": "2.0", "spec_version": "2.3"}),
|
865
865
|
],
|
866
866
|
)
|
867
867
|
async def test_scopes(
|
@@ -200,10 +200,7 @@ class H11Protocol(asyncio.Protocol):
|
|
200
200
|
full_raw_path = self.root_path.encode("ascii") + raw_path
|
201
201
|
self.scope = {
|
202
202
|
"type": "http",
|
203
|
-
"asgi": {
|
204
|
-
"version": self.config.asgi_version,
|
205
|
-
"spec_version": "2.4",
|
206
|
-
},
|
203
|
+
"asgi": {"version": self.config.asgi_version, "spec_version": "2.3"},
|
207
204
|
"http_version": event.http_version.decode("ascii"),
|
208
205
|
"server": self.server,
|
209
206
|
"client": self.client,
|
@@ -58,6 +58,14 @@ class HttpToolsProtocol(asyncio.Protocol):
|
|
58
58
|
self.access_logger = logging.getLogger("uvicorn.access")
|
59
59
|
self.access_log = self.access_logger.hasHandlers()
|
60
60
|
self.parser = httptools.HttpRequestParser(self)
|
61
|
+
|
62
|
+
try:
|
63
|
+
# Enable dangerous leniencies to allow server to a response on the first request from a pipelined request.
|
64
|
+
self.parser.set_dangerous_leniencies(lenient_data_after_close=True)
|
65
|
+
except AttributeError: # pragma: no cover
|
66
|
+
# httptools < 0.6.3
|
67
|
+
pass
|
68
|
+
|
61
69
|
self.ws_protocol_class = config.ws_protocol_class
|
62
70
|
self.root_path = config.root_path
|
63
71
|
self.limit_concurrency = config.limit_concurrency
|
@@ -214,7 +222,7 @@ class HttpToolsProtocol(asyncio.Protocol):
|
|
214
222
|
self.headers = []
|
215
223
|
self.scope = { # type: ignore[typeddict-item]
|
216
224
|
"type": "http",
|
217
|
-
"asgi": {"version": self.config.asgi_version, "spec_version": "2.
|
225
|
+
"asgi": {"version": self.config.asgi_version, "spec_version": "2.3"},
|
218
226
|
"http_version": "1.1",
|
219
227
|
"server": self.server,
|
220
228
|
"client": self.client,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|