Clean up of serve_static_files

This commit is contained in:
jaknapper 2025-05-15 14:07:06 +01:00
parent 457d68b63c
commit d4b3508b77

View file

@ -1,12 +1,11 @@
import os
from fastapi.responses import FileResponse, RedirectResponse from fastapi.responses import FileResponse, RedirectResponse
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from fastapi import FastAPI from fastapi import FastAPI
import os
import pathlib
def add_static_file(app: FastAPI, fname: str, folder: str): def add_static_file(app: FastAPI, fname: str, folder: str):
print(f"Adding route for /{fname}")
p = os.path.join(folder, fname) p = os.path.join(folder, fname)
app.get(f"/{fname}", response_class=FileResponse, include_in_schema=False)( app.get(f"/{fname}", response_class=FileResponse, include_in_schema=False)(
lambda: FileResponse(p) lambda: FileResponse(p)
@ -14,28 +13,15 @@ def add_static_file(app: FastAPI, fname: str, folder: str):
def add_static_files(app: FastAPI): def add_static_files(app: FastAPI):
# with importlib.resources.as_file(openflexure_microscope_server) as p: static_path = os.path.abspath(os.path.join(__file__, "..", "static"))
# static_path = p.join("/static/") if not os.path.isdir(static_path):
# TODO: don't hard code this! raise RuntimeError("Can't find static files")
search_paths = [
"/var/openflexure/application/openflexure-microscope-server/src/openflexure_microscope_server/static",
pathlib.Path().absolute()
/ "application/openflexure-microscope-server/src/openflexure_microscope_server/static",
]
if __file__:
search_paths.append(pathlib.Path(__file__).parent.parent / "static")
for static_path in search_paths:
if os.path.isdir(static_path):
break # stop once one of the paths exists
else:
# If we get to the else: block, no pat was found.
raise RuntimeError("Can't find static files :(")
@app.get("/", response_class=RedirectResponse) @app.get("/", response_class=RedirectResponse)
async def redirect_fastapi(): async def redirect_fastapi():
return "/index.html" return "/index.html"
# Mounting the webapp at / file by file to allow other endpoints to be created
for fname in os.listdir(static_path): for fname in os.listdir(static_path):
fpath = os.path.join(static_path, fname) fpath = os.path.join(static_path, fname)
if os.path.isfile(fpath): if os.path.isfile(fpath):