fix optional package materia-frontend
This commit is contained in:
parent
6ad7c29a48
commit
727f1b51ee
@ -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"
|
||||||
|
|
||||||
|
@ -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",
|
||||||
|
@ -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)
|
||||||
|
@ -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"}
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user