Skip to main content

A thin layer on top of FastAPI that adds some production readiness features.

Project description

prodapi

Continuous Integration Status Continuous Delivery Status Python Versions Code Coverage PyPI Package

A thin layer on top of FastAPI with the following features:

  • Integrates with FastAPI-Security to add a custom route /users/me (path is overridable)
  • Easily add CORS to your app by calling app.with_basic_cors()
  • Add health routes to the app via app.with_health_routes(). Adds a liveness route at /__is-alive and a readiness route at /__is-ready (both paths can be overridden). Useful together with Kubernetes liveness and readiness probes for example.
  • And, thanks to FastAPI, all routes are automatically added to the API documentation

Installation

pip install prodapi

Example

from prodapi import ProdAPI, ApiRouter, FastAPISecurity

# First let's set up security, via FastAPI-Security

security = FastAPISecurity()

# Set up HTTP Basic Auth
security.init_basic_auth([
    {"username": "johndoe", "password": "123"},
    {"username": "janedoe", "password": "abc123"},
])

# Set up OAuth2 and OIDC
# NOTE: There is also `init_oauth2_through_jwks` in case OIDC is not available
security.init_oauth2_through_oidc(
    "https://my-auth0-tenant.eu.auth0.com/.well-known/openid-configuration",
)

# Make sure that basic auth user `jane` and OAuth2 user
# `p56OnzZb8KrWC9paxCyv8ylyB2flTIky@clients` gets all permissions automatically.
# NOTE: For basic auth you have to set up permissions this way, for OAuth2 permissions
#       will be automatically extracted from the incoming JWT token (via the key
#       `permissions`, which might only be implemented for Auth0)
security.add_permission_overrides({
    "jane": ["*"],
    "p56OnzZb8KrWC9paxCyv8ylyB2flTIky@clients": ["*"],
)

# Now we're ready to create the app
# NOTE: ProdAPI is just a thin layer on top of `fastapi.FastAPI`
app = ProdAPI()

# CORS - Allow any origins, methods and headers. Don't expose any headers.
app.with_basic_cors()

# Add routes `/__is-alive` and `/__is-ready`. Useful together with Kubernetes or similar
# URL paths are configurable.
app.with_health_routes()

# Enable `/users/me` route to get info about the user. URL path is configurable.
app.with_user_routes(security)

# Create our app specific API router and our routes
products_router = ApiRouter()

@products_router.get("/products")
def list_products():
    return []

app.include_router(products_router)

# And we're done! Now just use uvicorn or similar to deploy.

TODO

  1. Create cli utility (using tiangolo typer?), which can generate:
    1. A stub project using prodapi
    2. Frontend (React?)
    3. docker-compose.yml and Dockerfile
    4. Kubernetes deployment files

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

prodapi-0.1.0.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

prodapi-0.1.0-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file prodapi-0.1.0.tar.gz.

File metadata

  • Download URL: prodapi-0.1.0.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.9.2 Linux/5.4.0-1041-azure

File hashes

Hashes for prodapi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 dbc41011f82a661b8096496e7fda25c6e089a8e653e09024c0d3ad9d9416c633
MD5 ac132c717b0f2a45e265b132bd3285e3
BLAKE2b-256 ef19baa8abda086fc8dd6863f8373ee186d373543f839e10d8b5641c5a3cd724

See more details on using hashes here.

File details

Details for the file prodapi-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: prodapi-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.9.2 Linux/5.4.0-1041-azure

File hashes

Hashes for prodapi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ed2c60611d36fdbc05f12c39563a7e66e848c58a16b4d834ca8c916c8766f172
MD5 84a2c459836de5c7b3c6874fcaf0650a
BLAKE2b-256 e563e8d70a35a462b17118ef380f0bcd0745620afac655adecc2261e0d98c2b6

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