From 45c6628feb9cd6dfd304da5f41f0feab3874cd84 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Sun, 12 Jan 2025 00:06:03 +0100 Subject: [PATCH] Fix SPA --- src/modules/web_app/app.py | 4 ++-- src/modules/web_app/utils/static.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 src/modules/web_app/utils/static.py diff --git a/src/modules/web_app/app.py b/src/modules/web_app/app.py index ba74993..fd7ca61 100644 --- a/src/modules/web_app/app.py +++ b/src/modules/web_app/app.py @@ -1,5 +1,4 @@ from fastapi import FastAPI -from fastapi.staticfiles import StaticFiles from core.mongo import mongo_manager from core.redis import redis_manager @@ -7,6 +6,7 @@ from core.broker import broker from .auth.authx import auth from .views import routes +from .utils.static import SPAStaticFiles def get_app() -> FastAPI: @@ -19,7 +19,7 @@ def get_app() -> FastAPI: app.mount( "/", - StaticFiles( + SPAStaticFiles( directory="modules/web_app/frontend", html=True ), diff --git a/src/modules/web_app/utils/static.py b/src/modules/web_app/utils/static.py new file mode 100644 index 0000000..5eab2af --- /dev/null +++ b/src/modules/web_app/utils/static.py @@ -0,0 +1,15 @@ +from fastapi.staticfiles import StaticFiles + +from starlette.responses import Response +from starlette.exceptions import HTTPException + + +class SPAStaticFiles(StaticFiles): + async def get_response(self, path: str, scope) -> Response: + try: + return await super().get_response(path, scope) + except HTTPException: + if path.startswith("/api"): + raise + + return await super().get_response("index.html", scope)