From 6110dddd9f6f0301733a2e60cd938984f8e3a91a Mon Sep 17 00:00:00 2001 From: Anton Kasimov Date: Wed, 29 Jan 2025 18:34:41 +0300 Subject: [PATCH 1/2] Do not process FileNotFoundError in FileResponse, resolves #979 FileNotFoundError can be processed in exception_handlers --- starlette/responses.py | 2 +- tests/test_responses.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/starlette/responses.py b/starlette/responses.py index 31874f655..a82fdb21a 100644 --- a/starlette/responses.py +++ b/starlette/responses.py @@ -341,7 +341,7 @@ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: stat_result = await anyio.to_thread.run_sync(os.stat, self.path) self.set_stat_headers(stat_result) except FileNotFoundError: - raise RuntimeError(f"File at path {self.path} does not exist.") + pass else: mode = stat_result.st_mode if not stat.S_ISREG(mode): diff --git a/tests/test_responses.py b/tests/test_responses.py index d5ed83499..2122cf85d 100644 --- a/tests/test_responses.py +++ b/tests/test_responses.py @@ -299,9 +299,8 @@ def test_file_response_with_missing_file_raises_error(tmp_path: Path, test_clien path = tmp_path / "404.txt" app = FileResponse(path=path, filename="404.txt") client = test_client_factory(app) - with pytest.raises(RuntimeError) as exc_info: + with pytest.raises(FileNotFoundError) as exc_info: client.get("/") - assert "does not exist" in str(exc_info.value) def test_file_response_with_chinese_filename(tmp_path: Path, test_client_factory: TestClientFactory) -> None: From cbdb4103ef34fca77816f8f487ab6183ff01e146 Mon Sep 17 00:00:00 2001 From: Anton Kasimov Date: Wed, 29 Jan 2025 20:39:23 +0300 Subject: [PATCH 2/2] Remove not-used exc_info from tests/test_responses.py --- tests/test_responses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_responses.py b/tests/test_responses.py index 2122cf85d..20bcc8775 100644 --- a/tests/test_responses.py +++ b/tests/test_responses.py @@ -299,7 +299,7 @@ def test_file_response_with_missing_file_raises_error(tmp_path: Path, test_clien path = tmp_path / "404.txt" app = FileResponse(path=path, filename="404.txt") client = test_client_factory(app) - with pytest.raises(FileNotFoundError) as exc_info: + with pytest.raises(FileNotFoundError): client.get("/")