Add your description here
Project description
FastAPI Docs Exception
Automatically expose your custom FastAPI exceptions in Swagger / ReDoc — with proper grouping and examples.
✨ Features
Stop repeating responses={...} in every route : This lightweight utility turns your custom HTTPException subclasses into shared, documented OpenAPI responses — complete with example payloads.
- Update docs: Convert your
HTTPExceptionsubclasses into shared OpenAPI responses. - Grouped by status code: if you have multiple exceptions with the same status code, they will be grouped together.
- Pydantic schema: Provide Pydantic models or tweak JSON Schema on the fly.
🚀 Installation
# With uv (recommended)
uv add fastapi_docs_exception
# Or the classic way
pip install fastapi_docs_exception
⚡ Quickstart
from fastapi import FastAPI, HTTPException
from fastapi_docs_exception import HTTPExceptionResponseFactory
# 1️⃣ Define your exceptions any way you like
class ApiNotFoundException(HTTPException):
"""Custom exception for API not found errors in FastAPI."""
def __init__(self, detail: str = "API key not found or invalid"):
super().__init__(status_code=404, detail=detail)
class NotFoundError(HTTPException):
"""Custom exception for not found errors in FastAPI."""
def __init__(self, detail: str = "Resource not found in the storage"):
super().__init__(status_code=404, detail=detail)
class InternalServerError(HTTPException):
"""Custom exception for internal server errors in FastAPI."""
def __init__(self, detail: str = "Internal server error, please try again later"):
super().__init__(status_code=500, detail=detail)
# 2️⃣ Feed them to the factory (classes allow more flexibility)
# You can specify Pydantic schemas, edit the JSON schema, etc.
exc_response_factory = HTTPExceptionResponseFactory()
app = FastAPI(
responses=exc_response_factory.build([
NotFoundError(), # 404 response
ApiNotFoundException(), # 404 response (grouped with the previous one)
InternalServerError(), # 500 response (only one)
]),
)
# 3️⃣ Use your exceptions in the code
@app.get("/items/{item_id}")
def get_item(item_id: str):
if item_id != "42":
raise NotFoundError()
return {"item_id": item_id}
Open http://localhost:8000/docs and you will see the custom 404 and 500 responses in the Swagger UI and ReDoc documentation with example payloads.
🔧 Development
# Clone
git clone https://github.com/your-user/fastapi_docs_exception.git
cd fastapi_docs_exception
# Optional: create a virtual env
uv venv # makes .venv and activates it
source .venv/bin/activate
# Install dev dependencies (test, lint, type-checking)
uv pip install -e ".[dev]"
Lint, format, type-check (all in one)
# Run all lint with ruff (lint, format), ty, bandit
uv run lint
Run the test-suite
# Run all tests with pytest
uv run test
A coverage report will be shown in the terminal and htmlcov will be generated in the project root.
🤝 Contributing
All kinds of contributions are welcome – bug reports, feature ideas, docs fixes...
- Fork the repo & create your branch:
git checkout -b feat/amazing-stuff - Commit your changes with clear messages.
- Run
uv run lint && uv run testand ensure everything stays green. - Open a Pull Request describing why the change is useful.
Please use commitizen to format your commit messages, e.g. cz commit
📜 License
fastapi_docs_exception is distributed under the MIT License – see LICENSE for details.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastapi_docs_exception-0.4.3.tar.gz.
File metadata
- Download URL: fastapi_docs_exception-0.4.3.tar.gz
- Upload date:
- Size: 186.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8b7cfed79b244a63e5a50a255dd98601dece89983e87e0cd6309f47a4a92e56
|
|
| MD5 |
0455115ddbc201622827660cfaf89f27
|
|
| BLAKE2b-256 |
6b481c5567cc509b56aa2ec6f80e5a1b626e8e06b730f9e94d2bb1f0ed922bdd
|
File details
Details for the file fastapi_docs_exception-0.4.3-py3-none-any.whl.
File metadata
- Download URL: fastapi_docs_exception-0.4.3-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7897236d132a5e25a1e0486a1ed271dd84732724e207bfd072f96d90ad870d8
|
|
| MD5 |
2747183e8a8344eaf74235938d973802
|
|
| BLAKE2b-256 |
8d1c9bd97abc7325585c23d759bb626f85a18a5829c6a9d6e8df7095d5baad9f
|