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.
Files changed (77) hide show
  1. {uvicorn-0.32.0 → uvicorn-0.32.1}/PKG-INFO +3 -4
  2. {uvicorn-0.32.0 → uvicorn-0.32.1}/pyproject.toml +1 -1
  3. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/protocols/test_http.py +2 -2
  4. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/__init__.py +1 -1
  5. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/h11_impl.py +1 -4
  6. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/httptools_impl.py +9 -1
  7. {uvicorn-0.32.0 → uvicorn-0.32.1}/.gitignore +0 -0
  8. {uvicorn-0.32.0 → uvicorn-0.32.1}/LICENSE.md +0 -0
  9. {uvicorn-0.32.0 → uvicorn-0.32.1}/README.md +0 -0
  10. {uvicorn-0.32.0 → uvicorn-0.32.1}/requirements.txt +0 -0
  11. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/__init__.py +0 -0
  12. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/conftest.py +0 -0
  13. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/__init__.py +0 -0
  14. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/circular_import_a.py +0 -0
  15. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/circular_import_b.py +0 -0
  16. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/raise_import_error.py +0 -0
  17. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/importer/test_importer.py +0 -0
  18. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/__init__.py +0 -0
  19. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/test_logging.py +0 -0
  20. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/test_message_logger.py +0 -0
  21. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/test_proxy_headers.py +0 -0
  22. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/middleware/test_wsgi.py +0 -0
  23. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/protocols/__init__.py +0 -0
  24. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/protocols/test_utils.py +0 -0
  25. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/protocols/test_websocket.py +0 -0
  26. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/response.py +0 -0
  27. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/supervisors/__init__.py +0 -0
  28. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/supervisors/test_multiprocess.py +0 -0
  29. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/supervisors/test_reload.py +0 -0
  30. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/supervisors/test_signal.py +0 -0
  31. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_auto_detection.py +0 -0
  32. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_cli.py +0 -0
  33. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_config.py +0 -0
  34. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_default_headers.py +0 -0
  35. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_lifespan.py +0 -0
  36. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_main.py +0 -0
  37. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_server.py +0 -0
  38. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_ssl.py +0 -0
  39. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/test_subprocess.py +0 -0
  40. {uvicorn-0.32.0 → uvicorn-0.32.1}/tests/utils.py +0 -0
  41. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/__main__.py +0 -0
  42. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/_subprocess.py +0 -0
  43. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/_types.py +0 -0
  44. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/config.py +0 -0
  45. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/importer.py +0 -0
  46. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/lifespan/__init__.py +0 -0
  47. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/lifespan/off.py +0 -0
  48. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/lifespan/on.py +0 -0
  49. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/logging.py +0 -0
  50. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/loops/__init__.py +0 -0
  51. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/loops/asyncio.py +0 -0
  52. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/loops/auto.py +0 -0
  53. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/loops/uvloop.py +0 -0
  54. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/main.py +0 -0
  55. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/__init__.py +0 -0
  56. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/asgi2.py +0 -0
  57. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/message_logger.py +0 -0
  58. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/proxy_headers.py +0 -0
  59. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/middleware/wsgi.py +0 -0
  60. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/__init__.py +0 -0
  61. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/__init__.py +0 -0
  62. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/auto.py +0 -0
  63. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/http/flow_control.py +0 -0
  64. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/utils.py +0 -0
  65. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/websockets/__init__.py +0 -0
  66. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/websockets/auto.py +0 -0
  67. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/websockets/websockets_impl.py +0 -0
  68. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/protocols/websockets/wsproto_impl.py +0 -0
  69. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/py.typed +0 -0
  70. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/server.py +0 -0
  71. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/__init__.py +0 -0
  72. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/basereload.py +0 -0
  73. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/multiprocess.py +0 -0
  74. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/statreload.py +0 -0
  75. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/watchfilesreload.py +0 -0
  76. {uvicorn-0.32.0 → uvicorn-0.32.1}/uvicorn/supervisors/watchgodreload.py +0 -0
  77. {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.0
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-Expression: BSD-3-Clause
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.5.0; extra == 'standard'
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.5.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.4"}),
864
- (asgi2app, {"version": "2.0", "spec_version": "2.4"}),
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(
@@ -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.32.0"
4
+ __version__ = "0.32.1"
5
5
  __all__ = ["main", "run", "Config", "Server"]
@@ -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.4"},
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