Skip to main content

Fastapi errors module.

Project description

Example of using exceptions schema generator for FastAPI.

from abc import abstractproperty
from typing import Optional
from fastapi import FastAPI
from fastapi_errors.exceptions import DefaultHTTPException, BaseHTTPException
from fastapi_errors.generator import generate_examples, ExamplesGenerator
from starlette.responses import JSONResponse

app = FastAPI()


class NotAuthorized(DefaultHTTPException):
    error = "UNAUTHORIZED"
    status_code = 401
    message = "Not authorized."
    field = None


class StaffOnly(DefaultHTTPException):
    error = "STAFF_ONLY"
    status_code = 401
    message = "Staff only."
    field = None


@app.get(
    "/",
    responses=generate_examples(
        NotAuthorized
    )
)
async def get():
    pass


class CustomException(BaseHTTPException):
    """Custom class for all HTTP exceptions."""

    error: str = abstractproperty()
    message: str = abstractproperty()
    field: Optional[str] = abstractproperty()
    item_id: int = abstractproperty()

    def __init__(
        self,
        item_id: Optional[int] = None,
        message: Optional[str] = None,
        field: Optional[str] = None
    ) -> None:
        """Initialize the exception."""
        self.message = message if message else self.message
        self.field = field if field else self.field
        self.item_id = item_id
        super().__init__()

    def example(self) -> dict:
        """Return an example of the error response. This is used in the OpenAPI docs."""
        # create details
        details = {
            "field": "string",
            "message": self.message,
            "item_id": self.item_id,
        }
        # create example
        example = {
            "summary": self.error,
            "value": {
                "status": self.status_code,
                "error": {"code": self.error, "details": details},
            },
        }
        return example


@app.exception_handler(CustomException)
async def custom_exception_handler(request, exc):
    return JSONResponse(
        status_code=exc.status_code,
        content={
            "status": exc.status_code,
            "code": exc.error,
            "details": {
                "message": str(exc.message),
                "field": exc.field,
                "item_id": exc.item_id,
            },
        },
    )


class MyException(CustomException):
    """Custom exception class."""

    error = "MY_ERROR"
    message = "My error message."
    item_id = 1
    field = None


class CustomExamplesGenerator(ExamplesGenerator):
    """Custom examples generator."""

    default_exceptions = (
        NotAuthorized,
    )

    staff = (
        StaffOnly,
    )


generate_examples = CustomExamplesGenerator.generate_examples


@app.get(
    "/{item_id}",
    responses=generate_examples(
        MyException,
        add=["staff"]
    )
)
async def get_item(item_id: int):
    raise MyException(item_id=item_id, field="burger")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi_errors-0.0.6.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

fastapi_errors-0.0.6-py2.py3-none-any.whl (5.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file fastapi_errors-0.0.6.tar.gz.

File metadata

  • Download URL: fastapi_errors-0.0.6.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.3

File hashes

Hashes for fastapi_errors-0.0.6.tar.gz
Algorithm Hash digest
SHA256 ad29a51e811087eb760a2858b49eefa45a03f2171d8cc608967fe5841e66e794
MD5 70b17e4b4b858aaa3c27f3660cf6808a
BLAKE2b-256 97970a51ba60bacdf8dce3239aded45abeaf9ad849a05dad27c337b629d83096

See more details on using hashes here.

File details

Details for the file fastapi_errors-0.0.6-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_errors-0.0.6-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a7d8ed19da6f4de99b8bc1bc37add8d5f9ab6f9335288938370a49fea86b4631
MD5 994b965482413ffec1623b2f41df1d6e
BLAKE2b-256 1a40573c27e89767c1622f3fe5fa039850572b078846602502fb41a716d68dfb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page