36 lines
796 B
Python
36 lines
796 B
Python
from pathlib import Path
|
|
|
|
import modal
|
|
|
|
import config
|
|
|
|
app_image = (
|
|
modal.Image.debian_slim(python_version="3.12")
|
|
.pip_install("lxml", "fastapi[standard]", "httpx")
|
|
.add_local_python_source("formex_viewer", "config")
|
|
)
|
|
|
|
app = modal.App("formex-viewer", image=app_image)
|
|
|
|
|
|
@app.function(
|
|
image=app_image.add_local_dir(config.ASSETS_PATH, "/assets"),
|
|
cpu=2,
|
|
)
|
|
@modal.asgi_app()
|
|
def fastapi_app():
|
|
import fastapi.staticfiles
|
|
|
|
from formex_viewer.server import app as formex_app
|
|
|
|
assets_path = Path("/assets")
|
|
|
|
@formex_app.get("/{path:path}")
|
|
async def frontend_handler(path: str):
|
|
fp = assets_path / path
|
|
if not fp.exists():
|
|
fp = assets_path / "index.html"
|
|
return fastapi.responses.FileResponse(fp)
|
|
|
|
return formex_app
|