feat: add configuration module with env-based settings
This commit is contained in:
parent
922851b966
commit
16a78663f3
3 changed files with 75 additions and 1 deletions
|
|
@ -55,8 +55,9 @@ indent-style = "space"
|
||||||
docstring-code-format = true
|
docstring-code-format = true
|
||||||
|
|
||||||
[tool.ty]
|
[tool.ty]
|
||||||
|
|
||||||
|
[tool.ty.environment]
|
||||||
python-version = "3.13"
|
python-version = "3.13"
|
||||||
src = ["src"]
|
|
||||||
|
|
||||||
[tool.ty.rules]
|
[tool.ty.rules]
|
||||||
possibly-unresolved-reference = "error"
|
possibly-unresolved-reference = "error"
|
||||||
|
|
|
||||||
36
src/fastapi_oidc_op/config.py
Normal file
36
src/fastapi_oidc_op/config.py
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
# src/fastapi_oidc_op/config.py
|
||||||
|
from enum import StrEnum
|
||||||
|
|
||||||
|
from pydantic_settings import BaseSettings
|
||||||
|
|
||||||
|
|
||||||
|
class StorageBackend(StrEnum):
|
||||||
|
SQLITE = "sqlite"
|
||||||
|
MONGODB = "mongodb"
|
||||||
|
|
||||||
|
|
||||||
|
class Settings(BaseSettings):
|
||||||
|
model_config = {"env_prefix": "OIDC_OP_"}
|
||||||
|
|
||||||
|
# Core
|
||||||
|
issuer: str
|
||||||
|
debug: bool = False
|
||||||
|
|
||||||
|
# Storage
|
||||||
|
storage_backend: StorageBackend = StorageBackend.SQLITE
|
||||||
|
|
||||||
|
# SQLite
|
||||||
|
sqlite_path: str = "data/oidc_op.db"
|
||||||
|
|
||||||
|
# MongoDB
|
||||||
|
mongodb_uri: str = "mongodb://localhost:27017"
|
||||||
|
mongodb_database: str = "oidc_op"
|
||||||
|
|
||||||
|
# Management RP
|
||||||
|
manage_client_id: str = "manage-app"
|
||||||
|
|
||||||
|
# Magic links
|
||||||
|
invite_ttl: int = 86400 # seconds
|
||||||
|
|
||||||
|
# Theme
|
||||||
|
theme: str = "default"
|
||||||
37
tests/test_config.py
Normal file
37
tests/test_config.py
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
# tests/test_config.py
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from fastapi_oidc_op.config import Settings, StorageBackend
|
||||||
|
|
||||||
|
|
||||||
|
def test_default_settings() -> None:
|
||||||
|
settings = Settings(
|
||||||
|
issuer="http://localhost:8000",
|
||||||
|
)
|
||||||
|
assert settings.issuer == "http://localhost:8000"
|
||||||
|
assert settings.storage_backend == StorageBackend.SQLITE
|
||||||
|
assert settings.sqlite_path == "data/oidc_op.db"
|
||||||
|
assert settings.manage_client_id == "manage-app"
|
||||||
|
assert settings.invite_ttl == 86400
|
||||||
|
assert settings.theme == "default"
|
||||||
|
|
||||||
|
|
||||||
|
def test_mongodb_settings() -> None:
|
||||||
|
settings = Settings(
|
||||||
|
issuer="http://localhost:8000",
|
||||||
|
storage_backend=StorageBackend.MONGODB,
|
||||||
|
mongodb_uri="mongodb://mongo:27017",
|
||||||
|
mongodb_database="test_db",
|
||||||
|
)
|
||||||
|
assert settings.storage_backend == StorageBackend.MONGODB
|
||||||
|
assert settings.mongodb_uri == "mongodb://mongo:27017"
|
||||||
|
assert settings.mongodb_database == "test_db"
|
||||||
|
|
||||||
|
|
||||||
|
def test_settings_from_env(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||||
|
monkeypatch.setenv("OIDC_OP_ISSUER", "https://op.example.org")
|
||||||
|
monkeypatch.setenv("OIDC_OP_STORAGE_BACKEND", "mongodb")
|
||||||
|
monkeypatch.setenv("OIDC_OP_MONGODB_URI", "mongodb://remote:27017")
|
||||||
|
settings = Settings() # type: ignore[call-arg]
|
||||||
|
assert settings.issuer == "https://op.example.org"
|
||||||
|
assert settings.storage_backend == StorageBackend.MONGODB
|
||||||
Loading…
Add table
Add a link
Reference in a new issue