from __future__ import annotations from collections.abc import Awaitable, Callable from typing import Any, cast from datastar_py.quart import DatastarResponse from quart import Quart, Response, redirect from repub.web.app import _page_patch_response, _shim_page_response, render_dashboard RouteGuard = Callable[[Callable[..., Awaitable[Any]]], Callable[..., Awaitable[Any]]] def register_dashboard_routes(app: Quart, *, admin_required: RouteGuard) -> None: @app.get("/admin/") @admin_required async def admin_dashboard_trailing_slash() -> Response: return cast(Response, redirect("/admin")) @app.get("/admin") @admin_required async def admin_dashboard_home() -> Response: return _shim_page_response(current_path="/admin", static_prefix="/admin") @app.post("/admin") @admin_required async def admin_dashboard_patch() -> DatastarResponse: return await _page_patch_response( app, lambda _tab_id: render_dashboard(app, path_prefix="/admin"), )