58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from collections.abc import Awaitable, Callable
|
||
|
|
from typing import Any
|
||
|
|
|
||
|
|
from datastar_py.quart import DatastarResponse
|
||
|
|
from quart import Quart, Response
|
||
|
|
|
||
|
|
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_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_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",
|
||
|
|
),
|
||
|
|
)
|