Coverage for src/lexigram/web/admin/pages/routes.py: 0%
22 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 04:37 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 04:37 +0800
1from __future__ import annotations
3from typing import Any
5from lexigram.contracts.admin import PageContent
6from lexigram.contracts.admin.widget_content import (
7 EmptyContent,
8 TableCell,
9 TableContent,
10)
11from lexigram.logging import get_logger
12from lexigram.web.routing.registry import RouteRegistry
14logger = get_logger(__name__)
17class WebRoutesPage:
18 """Route listing page for /admin/web/routes."""
20 def __init__(self, route_registry: RouteRegistry | None = None) -> None:
21 self._route_registry = route_registry
23 async def handle(self, request: Any) -> PageContent:
24 if self._route_registry is None:
25 return PageContent(
26 title="Routes",
27 body=EmptyContent(
28 title="Route Registry Unavailable",
29 message="The route registry could not be resolved. No routes to display.",
30 icon="map",
31 ),
32 )
34 try:
35 routes = self._route_registry.get_all_routes()
36 except Exception as exc:
37 logger.warning("web_routes.fetch_failed", error=str(exc))
38 return PageContent(
39 title="Routes",
40 body=EmptyContent(
41 title="Route Registry Unavailable",
42 message=f"Failed to fetch routes: {exc}",
43 icon="alert-triangle",
44 ),
45 )
47 rows = tuple(
48 (
49 TableCell(method),
50 TableCell(path),
51 TableCell(info.get("summary") or info.get("handler_name", "")),
52 TableCell(
53 f"{info.get('controller').__name__}.{info.get('handler_name', '')}"
54 if info.get("controller")
55 else info.get("handler_name", "")
56 ),
57 )
58 for path, methods in routes.items()
59 for method, info in methods.items()
60 )
62 if not rows:
63 return PageContent(
64 title="Routes",
65 body=EmptyContent(
66 title="No Routes Registered",
67 message="No routes have been registered yet.",
68 icon="map",
69 ),
70 )
72 return PageContent(
73 title="Routes",
74 body=TableContent(
75 columns=("Method", "Path", "Name", "Handler"),
76 rows=rows,
77 ),
78 )