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
|
||||
|
||||
[tool.ty]
|
||||
|
||||
[tool.ty.environment]
|
||||
python-version = "3.13"
|
||||
src = ["src"]
|
||||
|
||||
[tool.ty.rules]
|
||||
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