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

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for fastapi-explosion-extras-0.3.0.tar.gz
Algorithm Hash digest
SHA256 f7373a3e3933f3289037f763ec2b9f94309eef28ad2927e6b22829968e22e275
MD5 8a0b48a1d4599c7061f69a377a7e6c1e
BLAKE2b-256 0d367b26ea2c7c8927cdb843d49b4a790ab70e1a85df3d8b5e992d9a9ba356a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastapi_explosion_extras-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f2a7d781d7aa2e5cb7e04917a441ec4bc7050806f18bfb830035157829d16d8a
MD5 3e657c18f77266f31f374d4486a02b98
BLAKE2b-256 1cc174114935443b7eb0ebb8d3caabac72e4e12615bccc91443b8403d371e49b

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