Flexible maintenance mode middleware for FastAPI applications.
Reason this release was yanked:
Inconsistent Pydantic imports
Project description
Flexible maintenance mode middleware for FastAPI applications.
Documentation: https://msamsami.github.io/fastapi-maintenance
Source Code: https://github.com/msamsami/fastapi-maintenance
FastAPI Maintenance is a lightweight middleware for FastAPI applications that provides a flexible way to handle maintenance mode.
The package offers a simple yet powerful solution to temporarily disable your API endpoints during maintenance windows, deployments, or system updates. It's designed to be easy to integrate, highly customizable, and extensible to fit various use cases.
The main goal of FastAPI Maintenance is to provide a developer-friendly way to manage application maintenance states while ensuring a smooth experience for API consumers through customizable responses and fine-grained control over which routes remain accessible.
The key features are:
- Simple to use: Add just a few lines of code to enable maintenance mode.
- Pluggable storage backends: Choose between environment variables, local files, or create your own.
- Per-route control: Force maintenance mode on/off for specific routes.
- Customizable responses: Define your own maintenance page or custom JSON responses.
- Context manager: Temporarily enable maintenance mode for specific operations.
- Extensible: Easy to extend with custom backends and handlers.
Install
pip install fastapi-maintenance
Quick Start
Middleware
Add the maintenance mode middleware to your FastAPI application:
from fastapi import FastAPI
from fastapi_maintenance import MaintenanceModeMiddleware
app = FastAPI()
# Add the middleware to your FastAPI application
app.add_middleware(MaintenanceModeMiddleware)
@app.get("/")
def root():
return {"message": "Hello World"}
When maintenance mode is not active, endpoints function normally.
Enabling Maintenance Mode
You can enable maintenance mode in several ways:
1. Direct Configuration
Explicitly enable maintenance mode when adding the middleware:
app.add_middleware(MaintenanceModeMiddleware, enable_maintenance=True)
2. Environment Variables
Set the FASTAPI_MAINTENANCE_MODE environment variable before starting your application:
export FASTAPI_MAINTENANCE_MODE=1
uvicorn main:app
Maintenance Response
When maintenance mode is active, all endpoints (unless explicitly exempted) will return a 503 Service Unavailable response:
{"detail":"Service temporarily unavailable due to maintenance"}
Decorators
You can control maintenance mode behavior for specific routes using decorators:
from fastapi import FastAPI
from fastapi_maintenance import (
MaintenanceModeMiddleware,
force_maintenance_mode_off,
force_maintenance_mode_on,
)
app = FastAPI()
app.add_middleware(MaintenanceModeMiddleware)
# Always accessible, even during maintenance
@app.get("/status")
@force_maintenance_mode_off
def status():
return {"status": "operational"}
# Always returns maintenance response
@app.get("/deprecated")
@force_maintenance_mode_on
async def deprecated_endpoint():
return {"message": "This endpoint is deprecated"}
The force_maintenance_mode_off decorator keeps an endpoint accessible even when maintenance mode is enabled globally. Conversely, the force_maintenance_mode_on decorator forces an endpoint to always return the maintenance response, regardless of the global maintenance state.
Context Manager
You can use context managers to temporarily enforce the maintenance state for specific operations:
from fastapi import FastAPI
from fastapi_maintenance import (
MaintenanceModeMiddleware,
maintenance_mode_off,
maintenance_mode_on,
)
app = FastAPI()
app.add_middleware(MaintenanceModeMiddleware)
@app.post("/deploy")
async def deploy():
# Enable maintenance mode during deployment
async with maintenance_mode_on():
# Deployment logic here
await perform_deployment()
# Maintenance mode is automatically disabled after the block
return {"status": "deployed"}
@app.get("/health")
def health_check():
return {"status": "healthy"}
The maintenance_mode_on context manager temporarily enables maintenance mode for critical operations.
License
This project is licensed under the terms of the MIT license.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastapi_maintenance-0.0.1.tar.gz.
File metadata
- Download URL: fastapi_maintenance-0.0.1.tar.gz
- Upload date:
- Size: 119.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b25722d8c5a5f74228644683afbcba7da534a6e6965c5ed8ab09d25b7b457a31
|
|
| MD5 |
cd72ea20694e39ad5fc9e5cdf47ea5c5
|
|
| BLAKE2b-256 |
c12f29be0d3ac24e85f867718355ddf9d13fb70dedd5a726b93282445fd6095a
|
File details
Details for the file fastapi_maintenance-0.0.1-py3-none-any.whl.
File metadata
- Download URL: fastapi_maintenance-0.0.1-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e458730a484d6c13c51cba8955282c8f01386bc93312cee53ce0334874fc97c1
|
|
| MD5 |
e6c5b0c2949a8de404f878c01e416140
|
|
| BLAKE2b-256 |
98501dc246269a6e4a548f3e980525153b49fb94c2fc399f43ff7db63ff09ffe
|