fix optional package materia-frontend

This commit is contained in:
L-Nafaryus 2024-07-31 18:04:34 +05:00
parent 6ad7c29a48
commit 727f1b51ee
Signed by: L-Nafaryus
GPG Key ID: 553C97999B363D38
4 changed files with 37 additions and 20 deletions

View File

@ -69,8 +69,8 @@ includes = ["src/materia"]
[tool.pdm.scripts] [tool.pdm.scripts]
start.cmd = "python ./src/materia/main.py {args:start --app-mode development --log-level debug}" start.cmd = "python ./src/materia/main.py {args:start --app-mode development --log-level debug}"
upgrade.cmd = "alembic -c ./src/materia/alembic.ini upgrade {args:head}" upgrade.cmd = "alembic upgrade {args:head}"
downgrade.shell = "alembic -c ./src/materia/alembic.ini downgrade {args:base}" downgrade.cmd = "alembic downgrade {args:base}"
rev.cmd = "alembic revision {args:--autogenerate}" rev.cmd = "alembic revision {args:--autogenerate}"
rm-revs.shell = "rm -v ./src/materia/models/migrations/versions/*.py" rm-revs.shell = "rm -v ./src/materia/models/migrations/versions/*.py"

View File

@ -66,6 +66,13 @@ def make_lifespan(config: Config, logger: Logger):
def make_application(config: Config, logger: Logger): def make_application(config: Config, logger: Logger):
try:
import materia_frontend
except ModuleNotFoundError:
logger.warning(
"`materia_frontend` is not installed. No user interface will be served."
)
app = FastAPI( app = FastAPI(
title="materia", title="materia",
version="0.1.0", version="0.1.0",

View File

@ -1,5 +1,4 @@
from fastapi import APIRouter, Depends, HTTPException, status, Response from fastapi import APIRouter, Depends, HTTPException, status, Response
from fastapi.staticfiles import StaticFiles
from PIL import Image from PIL import Image
import io import io
from pathlib import Path from pathlib import Path
@ -7,7 +6,6 @@ import mimetypes
from materia.routers import middleware from materia.routers import middleware
from materia.config import Config from materia.config import Config
import materia_frontend
router = APIRouter(tags=["resources"], prefix="/resources") router = APIRouter(tags=["resources"], prefix="/resources")
@ -41,16 +39,22 @@ async def avatar(
return Response(content=buffer.getvalue(), media_type=Image.MIME[format]) return Response(content=buffer.getvalue(), media_type=Image.MIME[format])
@router.get("/assets/{filename}") try:
async def assets(filename: str): import materia_frontend
path = Path(materia_frontend.__path__[0]).joinpath( except ModuleNotFoundError:
"dist", "resources", "assets", filename pass
) else:
if not path.exists(): @router.get("/assets/{filename}")
return Response(status_code=status.HTTP_404_NOT_FOUND) async def assets(filename: str):
path = Path(materia_frontend.__path__[0]).joinpath(
"dist", "resources", "assets", filename
)
content = path.read_bytes() if not path.exists():
mime = mimetypes.guess_type(path)[0] return Response(status_code=status.HTTP_404_NOT_FOUND)
return Response(content, media_type=mime) content = path.read_bytes()
mime = mimetypes.guess_type(path)[0]
return Response(content, media_type=mime)

View File

@ -2,13 +2,19 @@ from pathlib import Path
from fastapi import APIRouter, Request from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
import materia_frontend
router = APIRouter(tags=["root"]) router = APIRouter(tags=["root"])
templates = Jinja2Templates(directory=Path(materia_frontend.__path__[0]) / "dist")
try:
import materia_frontend
except ModuleNotFoundError:
pass
else:
@router.get("/{spa:path}", response_class=HTMLResponse) templates = Jinja2Templates(directory=Path(materia_frontend.__path__[0]) / "dist")
async def root(request: Request):
return templates.TemplateResponse("base.html", {"request": request, "view": "app"}) @router.get("/{spa:path}", response_class=HTMLResponse)
async def root(request: Request):
return templates.TemplateResponse(
"base.html", {"request": request, "view": "app"}
)