You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
from fastapi import FastAPI
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
|
from admin_app.api.router import api_router
|
|
from admin_app.core.settings import AdminSettings, get_admin_settings
|
|
from admin_app.view import PANEL_STATIC_DIRECTORY, PANEL_STATIC_MOUNT_NAME, panel_router
|
|
|
|
|
|
# Fabrica explicita do runtime administrativo para facilitar testes e futura configuracao.
|
|
def create_app(settings: AdminSettings | None = None) -> FastAPI:
|
|
resolved_settings = settings or get_admin_settings()
|
|
app = FastAPI(
|
|
title=resolved_settings.admin_app_name,
|
|
version=resolved_settings.admin_version,
|
|
debug=resolved_settings.admin_debug,
|
|
)
|
|
app.state.admin_settings = resolved_settings
|
|
app.mount(
|
|
_build_panel_static_path(resolved_settings.admin_api_prefix),
|
|
StaticFiles(directory=str(PANEL_STATIC_DIRECTORY)),
|
|
name=PANEL_STATIC_MOUNT_NAME,
|
|
)
|
|
app.include_router(api_router, prefix=resolved_settings.admin_api_prefix)
|
|
app.include_router(panel_router, prefix=resolved_settings.admin_api_prefix)
|
|
return app
|
|
|
|
|
|
def _build_panel_static_path(api_prefix: str) -> str:
|
|
normalized_prefix = api_prefix.rstrip("/")
|
|
if normalized_prefix:
|
|
return f"{normalized_prefix}/panel/assets"
|
|
return "/panel/assets"
|
|
|