Skip to main content

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

Metadata

Release files for prodapi 0.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 prodapi 0.1.0
File Size Uploaded
prodapi-0.1.0.tar.gz 7.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for prodapi 0.1.0
File Interpreter ABI Platform
prodapi-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 15.3 kB

Release files / prodapi-0.1.0.tar.gz

Download URL prodapi-0.1.0.tar.gz
Size 7.6 kB
Tags Source
SHA-256 checksum
How to use checksums
dbc41011f82a661b8096496e7fda25c6e089a8e653e09024c0d3ad9d9416c633
BLAKE2b-256 checksum
How to use checksums
ef19baa8abda086fc8dd6863f8373ee186d373543f839e10d8b5641c5a3cd724
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.5 CPython/3.9.2 Linux/5.4.0-1041-azure

Release files / prodapi-0.1.0-py3-none-any.whl

Download URL prodapi-0.1.0-py3-none-any.whl
Size 7.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ed2c60611d36fdbc05f12c39563a7e66e848c58a16b4d834ca8c916c8766f172
BLAKE2b-256 checksum
How to use checksums
e563e8d70a35a462b17118ef380f0bcd0745620afac655adecc2261e0d98c2b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.5 CPython/3.9.2 Linux/5.4.0-1041-azure

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

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