]> git.ipfire.org Git - thirdparty/starlette.git/commitdiff
Bump the python-packages group with 5 updates (#2860)
authordependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sun, 2 Feb 2025 11:11:46 +0000 (12:11 +0100)
committerGitHub <noreply@github.com>
Sun, 2 Feb 2025 11:11:46 +0000 (12:11 +0100)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
requirements.txt
starlette/applications.py
starlette/datastructures.py
starlette/requests.py
starlette/responses.py
starlette/routing.py
starlette/staticfiles.py
tests/test_formparsers.py
tests/test_responses.py

index 88d6fb011424c8b3096bdae4461cc9e21b0a6ecd..579b5e72916d6f8cc98081f38b13ba85a4de5a16 100644 (file)
@@ -3,9 +3,9 @@
 
 # Testing
 coverage==7.6.10
-importlib-metadata==8.5.0
+importlib-metadata==8.6.1
 mypy==1.14.1
-ruff==0.8.5
+ruff==0.9.4
 typing_extensions==4.12.2
 types-contextvars==2.4.7.3
 types-PyYAML==6.0.12.20241230
@@ -14,11 +14,11 @@ pytest==8.3.4
 trio==0.28.0
 
 # Documentation
-black==24.10.0
+black==25.1.0
 mkdocs==1.6.1
-mkdocs-material==9.5.49
+mkdocs-material==9.6.1
 mkdocstrings-python==1.13.0
 
 # Packaging
 build==1.2.2.post1
-twine==6.0.1
+twine==6.1.0
index 0a717bb3af031f8b448f7b37df84e661236d89bd..6df5a707cc31fc0b6eda65a5fc61d972819f315a 100644 (file)
@@ -65,9 +65,9 @@ class Starlette:
         """
         # The lifespan context function is a newer style that replaces
         # on_startup / on_shutdown handlers. Use one or the other, not both.
-        assert lifespan is None or (
-            on_startup is None and on_shutdown is None
-        ), "Use either 'lifespan' or 'on_startup'/'on_shutdown', not both."
+        assert lifespan is None or (on_startup is None and on_shutdown is None), (
+            "Use either 'lifespan' or 'on_startup'/'on_shutdown', not both."
+        )
 
         self.debug = debug
         self.state = State()
index 90a7296a09a63a6993d652988782d991b2154686..f5d74d25f22b2360518229158af6a92c27248010 100644 (file)
@@ -461,12 +461,7 @@ class UploadFile:
             await run_in_threadpool(self.file.close)
 
     def __repr__(self) -> str:
-        return (
-            f"{self.__class__.__name__}("
-            f"filename={self.filename!r}, "
-            f"size={self.size!r}, "
-            f"headers={self.headers!r})"
-        )
+        return f"{self.__class__.__name__}(filename={self.filename!r}, size={self.size!r}, headers={self.headers!r})"
 
 
 class FormData(ImmutableMultiDict[str, typing.Union[UploadFile, str]]):
index 369f632e56d61c54abbb8b91fab34042032420ba..7dc04a746064897e5448a6625ae3cfe71ef425e3 100644 (file)
@@ -257,9 +257,9 @@ class Request(HTTPConnection):
         max_part_size: int = 1024 * 1024,
     ) -> FormData:
         if self._form is None:  # pragma: no branch
-            assert (
-                parse_options_header is not None
-            ), "The `python-multipart` library must be installed to use form parsing."
+            assert parse_options_header is not None, (
+                "The `python-multipart` library must be installed to use form parsing."
+            )
             content_type_header = self.headers.get("Content-Type")
             content_type: bytes
             content_type, _ = parse_options_header(content_type_header)
index 31874f655b96be7e36ddb67faaf4c3bd223f5372..5964df6780ebcf041106b7863f2416c453ace732 100644 (file)
@@ -529,9 +529,6 @@ class FileResponse(Response):
         return (
             content_length,
             lambda start, end: (
-                f"--{boundary}\n"
-                f"Content-Type: {content_type}\n"
-                f"Content-Range: bytes {start}-{end-1}/{max_size}\n"
-                "\n"
+                f"--{boundary}\nContent-Type: {content_type}\nContent-Range: bytes {start}-{end - 1}/{max_size}\n\n"
             ).encode("latin-1"),
         )
index 74daeadb0beec0ca243bf8a52ee97b7b3aad8716..add7df0c210f95af8310250d3ce7820aaeb170e3 100644 (file)
@@ -623,8 +623,7 @@ class Router:
             )
         elif inspect.isgeneratorfunction(lifespan):
             warnings.warn(
-                "generator function lifespans are deprecated, "
-                "use an @contextlib.asynccontextmanager function instead",
+                "generator function lifespans are deprecated, use an @contextlib.asynccontextmanager function instead",
                 DeprecationWarning,
             )
             self.lifespan_context = _wrap_gen_lifespan_context(
index 34be04cdc7c486a66944e147b7c775f44402f599..02848241e22825d6f80c774b2eda337a1073867b 100644 (file)
@@ -77,9 +77,9 @@ class StaticFiles:
             assert spec is not None, f"Package {package!r} could not be found."
             assert spec.origin is not None, f"Package {package!r} could not be found."
             package_directory = os.path.normpath(os.path.join(spec.origin, "..", statics_dir))
-            assert os.path.isdir(
-                package_directory
-            ), f"Directory '{statics_dir!r}' in package {package!r} could not be found."
+            assert os.path.isdir(package_directory), (
+                f"Directory '{statics_dir!r}' in package {package!r} could not be found."
+            )
             directories.append(package_directory)
 
         return directories
index 70beebc3f3338ebca27f57e5bb8576b403ed5a7b..b18fd6c40f55d89ba4cf76dfea308a48c28e6817 100644 (file)
@@ -484,7 +484,7 @@ def test_too_many_fields_raise(
     client = test_client_factory(app)
     fields = []
     for i in range(1001):
-        fields.append("--B\r\n" f'Content-Disposition: form-data; name="N{i}";\r\n\r\n' "\r\n")
+        fields.append(f'--B\r\nContent-Disposition: form-data; name="N{i}";\r\n\r\n\r\n')
     data = "".join(fields).encode("utf-8")
     with expectation:
         res = client.post(
@@ -511,7 +511,7 @@ def test_too_many_files_raise(
     client = test_client_factory(app)
     fields = []
     for i in range(1001):
-        fields.append("--B\r\n" f'Content-Disposition: form-data; name="N{i}"; filename="F{i}";\r\n\r\n' "\r\n")
+        fields.append(f'--B\r\nContent-Disposition: form-data; name="N{i}"; filename="F{i}";\r\n\r\n\r\n')
     data = "".join(fields).encode("utf-8")
     with expectation:
         res = client.post(
@@ -540,7 +540,7 @@ def test_too_many_files_single_field_raise(
     for i in range(1001):
         # This uses the same field name "N" for all files, equivalent to a
         # multifile upload form field
-        fields.append("--B\r\n" f'Content-Disposition: form-data; name="N"; filename="F{i}";\r\n\r\n' "\r\n")
+        fields.append(f'--B\r\nContent-Disposition: form-data; name="N"; filename="F{i}";\r\n\r\n\r\n')
     data = "".join(fields).encode("utf-8")
     with expectation:
         res = client.post(
@@ -567,8 +567,8 @@ def test_too_many_files_and_fields_raise(
     client = test_client_factory(app)
     fields = []
     for i in range(1001):
-        fields.append("--B\r\n" f'Content-Disposition: form-data; name="F{i}"; filename="F{i}";\r\n\r\n' "\r\n")
-        fields.append("--B\r\n" f'Content-Disposition: form-data; name="N{i}";\r\n\r\n' "\r\n")
+        fields.append(f'--B\r\nContent-Disposition: form-data; name="F{i}"; filename="F{i}";\r\n\r\n\r\n')
+        fields.append(f'--B\r\nContent-Disposition: form-data; name="N{i}";\r\n\r\n\r\n')
     data = "".join(fields).encode("utf-8")
     with expectation:
         res = client.post(
@@ -598,7 +598,7 @@ def test_max_fields_is_customizable_low_raises(
     client = test_client_factory(app)
     fields = []
     for i in range(2):
-        fields.append("--B\r\n" f'Content-Disposition: form-data; name="N{i}";\r\n\r\n' "\r\n")
+        fields.append(f'--B\r\nContent-Disposition: form-data; name="N{i}";\r\n\r\n\r\n')
     data = "".join(fields).encode("utf-8")
     with expectation:
         res = client.post(
@@ -628,7 +628,7 @@ def test_max_files_is_customizable_low_raises(
     client = test_client_factory(app)
     fields = []
     for i in range(2):
-        fields.append("--B\r\n" f'Content-Disposition: form-data; name="F{i}"; filename="F{i}";\r\n\r\n' "\r\n")
+        fields.append(f'--B\r\nContent-Disposition: form-data; name="F{i}"; filename="F{i}";\r\n\r\n\r\n')
     data = "".join(fields).encode("utf-8")
     with expectation:
         res = client.post(
@@ -644,8 +644,8 @@ def test_max_fields_is_customizable_high(test_client_factory: TestClientFactory)
     client = test_client_factory(make_app_max_parts(max_fields=2000, max_files=2000))
     fields = []
     for i in range(2000):
-        fields.append("--B\r\n" f'Content-Disposition: form-data; name="N{i}";\r\n\r\n' "\r\n")
-        fields.append("--B\r\n" f'Content-Disposition: form-data; name="F{i}"; filename="F{i}";\r\n\r\n' "\r\n")
+        fields.append(f'--B\r\nContent-Disposition: form-data; name="N{i}";\r\n\r\n\r\n')
+        fields.append(f'--B\r\nContent-Disposition: form-data; name="F{i}"; filename="F{i}";\r\n\r\n\r\n')
     data = "".join(fields).encode("utf-8")
     data += b"--B--\r\n"
     res = client.post(
index d5ed83499831122db593cf3259318346226c4f3a..0a00e9369e53ae01ebe8cd406f57828cf9875458 100644 (file)
@@ -687,12 +687,12 @@ def test_file_response_range_invalid(file_response_client: TestClient) -> None:
 
 
 def test_file_response_range_head_max(file_response_client: TestClient) -> None:
-    response = file_response_client.head("/", headers={"Range": f"bytes=0-{len(README.encode('utf8'))+1}"})
+    response = file_response_client.head("/", headers={"Range": f"bytes=0-{len(README.encode('utf8')) + 1}"})
     assert response.status_code == 206
 
 
 def test_file_response_range_416(file_response_client: TestClient) -> None:
-    response = file_response_client.head("/", headers={"Range": f"bytes={len(README.encode('utf8'))+1}-"})
+    response = file_response_client.head("/", headers={"Range": f"bytes={len(README.encode('utf8')) + 1}-"})
     assert response.status_code == 416
     assert response.headers["Content-Range"] == f"*/{len(README.encode('utf8'))}"