Skip to main content

A collection of utilities for running FastAPI applications at Explosion AI

Project description

FastAPI Extras

This library is a collection of utilities for running FastAPI applications at Explosion AI.

HttpizeErrorsAPIRouter

This custom router's main functionality is to handle errors per route instead of through a global exception handler by adding the httpize_errors keyword argument to the FastAPI route declaration. This allows each route to return normal informative Python errors instead of the FastAPI HTTPException class to get valid responses.

It also times each request and sets the X-Response-Time header on the Response

An example route

@router.get("/testing", httpize_errors={ValueError: 400})
def test_route(i: int):
    if i < 1:
        raise ValueError("Bad Input Data")
    return {"i": i}

If the ValueError is raised, this custom router knows to return a Response with a status code of 400 (Bad Request) and the message provided to the ValueError

Usage

FastAPI doesn't have built-in support for overriding the app Router, however this is required since we add a new keyword argument to the route declaration. FastAPI doesn't pass **kwargs forward, it only passes explict named keyword arguments.

To get around this, we need to overwrite the app router manually and refresh the routes after all of them have been included in the main app. This looks like:

from fastapi import FastAPI
from fastapi_extras import HttpizeErrorsAPIRouter, init_app
import uvicorn


# API Router (could be in another module)
api_router = HttpizeErrorsAPIRouter(tags=["tests"])


@api_router.get("/testing", httpize_errors={ValueError: 400})
def test_route(i: int):
    if i < 1:
        raise ValueError("Bad Input Data")
    return {"i": i}


# Main app definition
app = FastAPI()

# Overwrite App Router to use the custom HttpizeErrorsAPIRouter
app.router = HttpizeErrorsAPIRouter.from_app(app)

# Include API Router from above
app.include_router(api_router)

# Refresh the App (this rebuilds the Starlette Middleware Stack)
init_app(app)

uvicorn.run(app)

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-explosion-extras-0.3.1.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

fastapi_explosion_extras-0.3.1-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file fastapi-explosion-extras-0.3.1.tar.gz.

File metadata

File hashes

Hashes for fastapi-explosion-extras-0.3.1.tar.gz
Algorithm Hash digest
SHA256 b0fbcbf7234189bf65a2c0ff2718f61c233d120bee7b6e14fc33cd4f957e1f14
MD5 1ee9dae1cc85220636ac0b142655d0c9
BLAKE2b-256 5ee460a6342526d9e402e90d4075a51fa0530a2b7c7af5bf81bfd2105d8192fa

See more details on using hashes here.

File details

Details for the file fastapi_explosion_extras-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_explosion_extras-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 03a75ba05b2c5fcae695065df2d5d58559f34699441d5c91b2ce3b3537d706dd
MD5 bf39939a2259f78bf62bc059c3eda9fe
BLAKE2b-256 fd10b1cb80d2194959c57fc8b17dd12d78f13f965a8e88d3e1a90bf3c1dcf7fa

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