From bd9bf48dabef8110785388bed3e90f95e5de4082 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Tue, 6 Aug 2024 09:49:37 +0200 Subject: [PATCH 1/4] Support Python 3.13 --- .github/workflows/test-suite.yml | 2 +- pyproject.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-suite.yml b/.github/workflows/test-suite.yml index 0bb570ced..fac946039 100644 --- a/.github/workflows/test-suite.yml +++ b/.github/workflows/test-suite.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] steps: - uses: "actions/checkout@v4" diff --git a/pyproject.toml b/pyproject.toml index b1271db8d..f2721c870 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,7 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Topic :: Internet :: WWW/HTTP", ] dependencies = [ From ad7a72be88d86aaf3c9b8e2d14b6227d4af18300 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Tue, 6 Aug 2024 11:27:47 +0200 Subject: [PATCH 2/4] Use `exc_type_str` instead of `exc_type.__name__` --- starlette/middleware/errors.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/starlette/middleware/errors.py b/starlette/middleware/errors.py index e9eba62b0..3fc4a4402 100644 --- a/starlette/middleware/errors.py +++ b/starlette/middleware/errors.py @@ -2,6 +2,7 @@ import html import inspect +import sys import traceback import typing @@ -237,11 +238,13 @@ def generate_html(self, exc: Exception, limit: int = 7) -> str: exc_html += self.generate_frame_html(frame, is_collapsed) is_collapsed = True + if sys.version_info >= (3, 13): # pragma: no cover + exc_type_str = traceback_obj.exc_type_str + else: # pragma: no cover + exc_type_str = traceback_obj.exc_type.__name__ + # escape error class and text - error = ( - f"{html.escape(traceback_obj.exc_type.__name__)}: " - f"{html.escape(str(traceback_obj))}" - ) + error = f"{html.escape(exc_type_str)}: {html.escape(str(traceback_obj))}" return TEMPLATE.format(styles=STYLES, js=JS, error=error, exc_html=exc_html) From 18f0d6757fb76048bf577e39593951f984735b49 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Tue, 6 Aug 2024 12:34:00 +0200 Subject: [PATCH 3/4] Close GzipFile --- starlette/middleware/gzip.py | 1 + 1 file changed, 1 insertion(+) diff --git a/starlette/middleware/gzip.py b/starlette/middleware/gzip.py index cbb0f4a5b..43f19aad4 100644 --- a/starlette/middleware/gzip.py +++ b/starlette/middleware/gzip.py @@ -42,6 +42,7 @@ def __init__(self, app: ASGIApp, minimum_size: int, compresslevel: int = 9) -> N async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: self.send = send await self.app(scope, receive, self.send_with_gzip) + self.gzip_file.close() async def send_with_gzip(self, message: Message) -> None: message_type = message["type"] From 98a81d9d5d5907ffb9e9e6955d7905746bd0715d Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Tue, 6 Aug 2024 17:01:10 +0200 Subject: [PATCH 4/4] min changes --- starlette/middleware/gzip.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/starlette/middleware/gzip.py b/starlette/middleware/gzip.py index 43f19aad4..0579e0410 100644 --- a/starlette/middleware/gzip.py +++ b/starlette/middleware/gzip.py @@ -41,8 +41,8 @@ def __init__(self, app: ASGIApp, minimum_size: int, compresslevel: int = 9) -> N async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: self.send = send - await self.app(scope, receive, self.send_with_gzip) - self.gzip_file.close() + with self.gzip_buffer, self.gzip_file: + await self.app(scope, receive, self.send_with_gzip) async def send_with_gzip(self, message: Message) -> None: message_type = message["type"]