From 6c1570a254dffbf2e23081730c833424866cf059 Mon Sep 17 00:00:00 2001 From: zwitschi Date: Wed, 12 Nov 2025 22:42:09 +0100 Subject: [PATCH] feat: Update favicon handling to use FileResponse and add favicon.ico --- main.py | 6 +++--- static/favicon.ico | Bin 0 -> 51262 bytes 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 static/favicon.ico diff --git a/main.py b/main.py index 077c26b..f5f5c1e 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,7 @@ from typing import Awaitable, Callable from fastapi import FastAPI, Request, Response from fastapi.staticfiles import StaticFiles +from fastapi.responses import FileResponse from config.settings import get_settings from middleware.auth_session import AuthSessionMiddleware @@ -44,9 +45,8 @@ async def health() -> dict[str, str]: @app.get("/favicon.ico", include_in_schema=False) async def favicon() -> Response: static_directory = "static" - img_directory = f"{static_directory}/img" - favicon_img = "logo_32x32.png" - return StaticFiles(directory=img_directory).lookup_path(favicon_img)[0] + favicon_img = "favicon.ico" + return FileResponse(f"{static_directory}/{favicon_img}") @app.on_event("startup") diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c3eedc91cd6ed71b27f055f63d624fdb43aaba71 GIT binary patch literal 51262 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 literal 0 HcmV?d00001