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_publisher RouteGuard = Callable[[Callable[..., Awaitable[Any]]], Callable[..., Awaitable[Any]]] def register_publisher_dashboard_routes( app: Quart, *, publisher_required: RouteGuard, admin_required: RouteGuard, ) -> None: @app.get("/publisher/") @publisher_required async def publisher_trailing_slash() -> Response: return cast(Response, redirect("/publisher")) @app.get("/publisher") @publisher_required async def publisher_home() -> Response: return _shim_page_response( current_path="/publisher", static_prefix="/publisher" ) @app.post("/publisher") @publisher_required async def publisher_patch() -> DatastarResponse: return await _page_patch_response( app, lambda _tab_id: render_publisher( app, current_path="/publisher", path_prefix="/publisher", ), ) @app.get("/admin/publisher/") @admin_required async def admin_publisher_trailing_slash() -> Response: return cast(Response, redirect("/admin/publisher")) @app.get("/admin/publisher") @admin_required async def admin_publisher_home() -> Response: return _shim_page_response( current_path="/admin/publisher", static_prefix="/admin", ) @app.post("/admin/publisher") @admin_required async def admin_publisher_patch() -> DatastarResponse: return await _page_patch_response( app, lambda _tab_id: render_publisher( app, current_path="/admin/publisher", path_prefix="/admin/publisher", ), )