Coverage for src/lexigram/admin/openapi/controller.py: 0%

11 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-24 23:39 +0800

1from __future__ import annotations 

2 

3from typing import TYPE_CHECKING, Any 

4 

5from starlette.responses import JSONResponse 

6 

7from lexigram.admin.openapi.resource_converter import resources_to_openapi_spec 

8 

9if TYPE_CHECKING: 

10 from starlette.requests import Request 

11 

12 

13class OpenAPIController: 

14 """Serves the OpenAPI specification for admin resources. 

15 

16 Mounted at ``/admin/openapi.json`` (or the configured admin prefix). 

17 """ 

18 

19 def __init__(self, resources: dict[str, Any]) -> None: 

20 self._resources = resources 

21 

22 async def get_spec(self, request: Request) -> JSONResponse: 

23 """Handle ``GET /admin/openapi.json``. 

24 

25 Returns: 

26 A JSON response containing the full OpenAPI 3.0.3 spec. 

27 """ 

28 spec = resources_to_openapi_spec(self._resources) 

29 return JSONResponse(spec) 

30 

31 

32__all__ = ["OpenAPIController"]