A thin layer on top of FastAPI that adds some production readiness features.
Project description
prodapi
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
- Create cli utility (using tiangolo typer?), which can generate:
- A stub project using
prodapi
- Frontend (React?)
- docker-compose.yml and Dockerfile
- Kubernetes deployment files
- A stub project using
Project details
Release history Release notifications | RSS feed
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)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | dbc41011f82a661b8096496e7fda25c6e089a8e653e09024c0d3ad9d9416c633 |
|
MD5 | ac132c717b0f2a45e265b132bd3285e3 |
|
BLAKE2b-256 | ef19baa8abda086fc8dd6863f8373ee186d373543f839e10d8b5641c5a3cd724 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | ed2c60611d36fdbc05f12c39563a7e66e848c58a16b4d834ca8c916c8766f172 |
|
MD5 | 84a2c459836de5c7b3c6874fcaf0650a |
|
BLAKE2b-256 | e563e8d70a35a462b17118ef380f0bcd0745620afac655adecc2261e0d98c2b6 |