FastAPI Example

FastAPI projects often require alternative configurations for a number of different environments. Here is outlined how sfs-settings provides a more consistent pattern for setting the application’s various configurations. The example shown scales to setting values in multiple files as well as providing more advanced features such as reloading on each access.

Project Structure

myapp/
├── .env
├── app.py
└── config.py

Configuration Module

config.py
from sfs_settings import track_env_var, track_secret_var

# Environment variables
track_env_var("APP_NAME")
track_env_var("ADMIN_EMAIL")
track_env_var("ITEMS_PER_USER", conversion_function=int, reload_on_access=True)

# Secrets
track_secret_var("SECRET_KEY", "MyApp", "myapp_secret")
track_secret_var("API_KEY", "MyApp", "myapp_external_api_key")

Application Code

mod_name/app.py
from fastapi import FastAPI

import sfs_settings as sfs

app = FastAPI()

@app.get("/info")
async def info():
    return {
        "app_name": sfs.APP_NAME,
        "admin_email": sfs.ADMIN_EMAIL,
        "items_per_user": sfs.ITEMS_PER_USER,
    }

Environment File

.env
FLASK_ENV=development
DATABASE_URL=sqlite:///dev.db
DEBUG=true