Coverage for src/lexigram/admin/core/rendering.py: 56%
16 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
1from __future__ import annotations
3from typing import TYPE_CHECKING
5from lexigram.admin.config import AdminConfig
6from lexigram.di.decorators import inject
8if TYPE_CHECKING:
9 from starlette.requests import Request
10 from starlette.responses import HTMLResponse
11 from starlette.templating import Jinja2Templates
14@inject
15class AdminRenderer:
16 """Renderer for admin templates."""
18 def __init__(self, config: AdminConfig, templates: Jinja2Templates | None = None):
19 self._config = config
20 self._templates = templates
22 def render_template(
23 self,
24 request: Request,
25 name: str,
26 context: dict,
27 ) -> HTMLResponse:
28 if self._templates is None:
29 raise ValueError("No Jinja2Templates configured for AdminRenderer")
30 context.update(
31 {
32 "title": self._config.title,
33 "admin": None,
34 },
35 )
36 return self._templates.TemplateResponse(request, name, context=context)
38 def render_html_shell(
39 self,
40 request: Request,
41 content_html: str,
42 title: str = "",
43 ) -> HTMLResponse:
44 return self.render_template(
45 request,
46 "admin_shell.html",
47 {
48 "content": content_html,
49 "title": f"{title} - {self._config.title}"
50 if title
51 else self._config.title,
52 },
53 )