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)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad29a51e811087eb760a2858b49eefa45a03f2171d8cc608967fe5841e66e794 |
|
MD5 | 70b17e4b4b858aaa3c27f3660cf6808a |
|
BLAKE2b-256 | 97970a51ba60bacdf8dce3239aded45abeaf9ad849a05dad27c337b629d83096 |
File details
Details for the file fastapi_errors-0.0.6-py2.py3-none-any.whl
.
File metadata
- Download URL: fastapi_errors-0.0.6-py2.py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a7d8ed19da6f4de99b8bc1bc37add8d5f9ab6f9335288938370a49fea86b4631 |
|
MD5 | 994b965482413ffec1623b2f41df1d6e |
|
BLAKE2b-256 | 1a40573c27e89767c1622f3fe5fa039850572b078846602502fb41a716d68dfb |