📝 Add documentation about settings and env vars (#1118)

* Add doc and example for env var config

* Syntax highlight for .env file

* Add test for configuration docs

* 📝 Update settings docs, add more examples

*  Add tests for settings

* 🚚 Rename "Application Configuration" to "Metadata and Docs URLs"

to disambiguate between that and settings

* 🔥 Remove replaced example file

Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
This commit is contained in:
alexmitelman
2020-04-02 07:55:20 +03:00
committed by GitHub
parent 6e1cd45a46
commit d4d5b21b2e
22 changed files with 448 additions and 11 deletions

View File

View File

@@ -0,0 +1,10 @@
from pydantic import BaseSettings
class Settings(BaseSettings):
app_name: str = "Awesome API"
admin_email: str
items_per_user: int = 50
settings = Settings()

View File

@@ -0,0 +1,14 @@
from fastapi import FastAPI
from . import config
app = FastAPI()
@app.get("/info")
async def info():
return {
"app_name": config.settings.app_name,
"admin_email": config.settings.admin_email,
"items_per_user": config.settings.items_per_user,
}

View File

View File

@@ -0,0 +1,10 @@
from pydantic import BaseSettings
class Settings(BaseSettings):
app_name: str = "Awesome API"
admin_email: str
items_per_user: int = 50
settings: Settings = None

View File

@@ -0,0 +1,21 @@
from fastapi import Depends, FastAPI
from . import config
app = FastAPI()
def get_settings():
if config.settings:
return config.settings
config.settings = config.Settings()
return config.settings
@app.get("/info")
async def info(settings: config.Settings = Depends(get_settings)):
return {
"app_name": settings.app_name,
"admin_email": settings.admin_email,
"items_per_user": settings.items_per_user,
}

View File

@@ -0,0 +1,23 @@
from fastapi.testclient import TestClient
from . import config, main
client = TestClient(main.app)
def get_settings_override():
return config.Settings(admin_email="testing_admin@example.com")
main.app.dependency_overrides[main.get_settings] = get_settings_override
def test_app():
response = client.get("/info")
data = response.json()
assert data == {
"app_name": "Awesome API",
"admin_email": "testing_admin@example.com",
"items_per_user": 50,
}

View File

View File

@@ -0,0 +1,13 @@
from pydantic import BaseSettings
class Settings(BaseSettings):
app_name: str = "Awesome API"
admin_email: str
items_per_user: int = 50
class Config:
env_file = ".env"
settings: Settings = None

View File

@@ -0,0 +1,21 @@
from fastapi import Depends, FastAPI
from . import config
app = FastAPI()
def get_settings():
if config.settings:
return config.settings
config.settings = config.Settings()
return config.settings
@app.get("/info")
async def info(settings: config.Settings = Depends(get_settings)):
return {
"app_name": settings.app_name,
"admin_email": settings.admin_email,
"items_per_user": settings.items_per_user,
}

View File

@@ -0,0 +1,21 @@
from fastapi import FastAPI
from pydantic import BaseSettings
class Settings(BaseSettings):
app_name: str = "Awesome API"
admin_email: str
items_per_user: int = 50
settings = Settings()
app = FastAPI()
@app.get("/info")
async def info():
return {
"app_name": settings.app_name,
"admin_email": settings.admin_email,
"items_per_user": settings.items_per_user,
}