27 lines
942 B
Python
27 lines
942 B
Python
from typing import TYPE_CHECKING, Any, NoReturn
|
|
|
|
from django.http import Http404, HttpRequest, HttpResponse
|
|
|
|
from ninja.openapi.docs import DocsBase
|
|
from ninja.responses import Response
|
|
|
|
if TYPE_CHECKING:
|
|
# if anyone knows a cleaner way to make mypy happy - welcome
|
|
from ninja import NinjaAPI # pragma: no cover
|
|
|
|
|
|
def default_home(request: HttpRequest, api: "NinjaAPI", **kwargs: Any) -> NoReturn:
|
|
"This view is mainly needed to determine the full path for API operations"
|
|
docs_url = f"{request.path}{api.docs_url}".replace("//", "/")
|
|
raise Http404(f"docs_url = {docs_url}")
|
|
|
|
|
|
def openapi_json(request: HttpRequest, api: "NinjaAPI", **kwargs: Any) -> HttpResponse:
|
|
schema = api.get_openapi_schema(path_params=kwargs)
|
|
return Response(schema)
|
|
|
|
|
|
def openapi_view(request: HttpRequest, api: "NinjaAPI", **kwargs: Any) -> HttpResponse:
|
|
docs: DocsBase = api.docs
|
|
return docs.render_page(request, api, **kwargs)
|