Skip to content

make HttpError valid response type #1507

@fraser-langton

Description

@fraser-langton
  • Reduce a bit of boilerplate and allow HttpError exceptions to be used in responses for ninja.router.Router.api_operation

  • Also more tightly couples the openapi documentation to the code implementation*

    • *depending on how implemented

For the most common use case: define a custom exception, and just use default exception handler

Current

from ninja import NinjaAPI, Schema
from ninja.errors import HttpError
from ninja.responses import codes_2xx

api = NinjaAPI()


class RequestErrorResponse(Schema):
    detail: str


class RequestError(HttpError):
    status_code = 400
    message = "Request Error"


@api.get(
    "/manual_responses",
    response={
        codes_2xx: str,
        400: RequestErrorResponse,
    },
)
def manual_responses(request): ...

Proposed

from ninja import NinjaAPI
from ninja.errors import HttpError
from ninja.responses import codes_2xx

api = NinjaAPI()


class RequestError(HttpError):
    status_code = 400
    message = "Request Error"


@api.get(
    "/excs_in_responses",
    response={codes_2xx: str, 400: RequestError},
)
def excs_in_responses(request): ...

Similar discussion in fastapi: fastapi/fastapi#9124

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions