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

Uploaded Source

Built Distribution

fastapi_explosion_extras-0.1.1-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fastapi-explosion-extras-0.1.1.tar.gz
  • Upload date:
  • Size: 7.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.9

File hashes

Hashes for fastapi-explosion-extras-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ff6e405352637b937c647d0b64e1d1e1abe4386884039f15a48a2fbf97d0aa9a
MD5 67e5ff64037c58196757607db396c1b6
BLAKE2b-256 ea5cc238e60dfbfd449370a84394cc5ceb830b5eb80423c91c6b98bd7f3aceed

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastapi_explosion_extras-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.9

File hashes

Hashes for fastapi_explosion_extras-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6cf986a0a5b5a748315b2e5551424fc1e00f87fe2a8344b6815725b314e486e2
MD5 d5abbc5c5165b9018aa733a90026cb28
BLAKE2b-256 4fa599e6d153857390ab2b0ca1bfd3916665b6b86eb9a78610c438bfb733fbfe

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