Skip to main content

☄️ FastAPI Response Schema

PyPI PyPI - Python Version GitHub code size in bytes Commits TestsLint

Overview

This package extends the FastAPI response model schema allowing you to have a common response wrapper via a fastapi.routing.APIRoute.

This library supports Python versions >=3.8 and FastAPI versions >=0.89.1.

Getting started

Install the package

pip install fastapi-responseschema

If you are planning to use the pagination integration, you can install the package including fastapi-pagination

pip install fastapi-responseschema[pagination]

Usage

from typing import Generic, TypeVar, Any, Optional, List
from pydantic import BaseModel
from fastapi import FastAPI
from fastapi_responseschema import AbstractResponseSchema, SchemaAPIRoute, wrap_app_responses


# Build your "Response Schema"
class ResponseMetadata(BaseModel):
    error: bool
    message: Optional[str]


T = TypeVar("T")


class ResponseSchema(AbstractResponseSchema[T], Generic[T]):
    data: T
    meta: ResponseMetadata

    @classmethod
    def from_exception(cls, reason, status_code, message: str = "Error", **others):
        return cls(
            data=reason,
            meta=ResponseMetadata(error=status_code >= 400, message=message)
        )

    @classmethod
    def from_api_route(
        cls, content: Any, status_code: int, description: Optional[str] = None, **others
    ):
        return cls(
            data=content,
            meta=ResponseMetadata(error=status_code >= 400, message=description)
        )


# Create an APIRoute
class Route(SchemaAPIRoute):
    response_schema = ResponseSchema

# Integrate in FastAPI app
app = FastAPI()
wrap_app_responses(app, Route)

class Item(BaseModel):
    id: int
    name: str


@app.get("/items", response_model=List[Item], description="This is a route")
def get_operation():
    return [Item(id=1, name="ciao"), Item(id=2, name="hola"), Item(id=3, name="hello")]

Te result of GET /items:

HTTP/1.1 200 OK
content-length: 131
content-type: application/json

{
    "data": [
        {
            "id": 1,
            "name": "ciao"
        },
        {
            "id": 2,
            "name": "hola"
        },
        {
            "id": 3,
            "name": "hello"
        }
    ],
    "meta": {
        "error": false,
        "message": "This is a route"
    }
}

Docs

You can find detailed info for this package in the Documentation.

Contributing

Contributions are very welcome!

How to contribute

Just open an issue or submit a pull request on GitHub.

While submitting a pull request describe what changes have been made.

More info on Docs section

Contributors Wall

Contributors Wall

Release files for fastapi-responseschema 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastapi-responseschema 2.1.0
File Size Uploaded
fastapi_responseschema-2.1.0.tar.gz 11.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-responseschema 2.1.0
File Interpreter ABI Platform
fastapi_responseschema-2.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 23.9 kB

Release files / fastapi_responseschema-2.1.0.tar.gz

Download URL fastapi_responseschema-2.1.0.tar.gz
Size 11.0 kB
Tags Source
SHA-256 checksum
How to use checksums
2948e20509235bdfed24788cdbce65be62a3af8aa4f1a0d459c4fddb78eb717f
BLAKE2b-256 checksum
How to use checksums
6dda749ac5be7149427b59c3e0c3ae1c25ebae3b7514bd585dc3085f4499d770
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.1 CPython/3.8.18 Linux/6.2.0-1018-azure

Release files / fastapi_responseschema-2.1.0-py3-none-any.whl

Download URL fastapi_responseschema-2.1.0-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dbb96f838b83323d11faababa3dc17ce760701f5d2ac6c25632935b09e65507a
BLAKE2b-256 checksum
How to use checksums
07eeab8ca40cd4b6c7c776135c8f7fdc145a7df459a86a596aafc31cb1d6d2d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.1 CPython/3.8.18 Linux/6.2.0-1018-azure
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page