Source code for axioms_fastapi.config
"""Configuration management for Axioms FastAPI.
This module provides configuration classes for managing Axioms settings in FastAPI applications.
"""
from typing import List, Optional
from pydantic import ConfigDict
from pydantic_settings import BaseSettings
[docs]
class AxiomsConfig(BaseSettings):
"""Configuration for Axioms FastAPI authentication.
All settings can be set via environment variables with the AXIOMS_ prefix.
Example::
config = AxiomsConfig(
AXIOMS_AUDIENCE="api.example.com",
AXIOMS_DOMAIN="auth.example.com"
)
"""
# Required configuration
AXIOMS_AUDIENCE: str
# Optional domain and URL configuration
AXIOMS_DOMAIN: Optional[str] = None
AXIOMS_ISS_URL: Optional[str] = None
AXIOMS_JWKS_URL: Optional[str] = None
# Optional claim name configuration
AXIOMS_SCOPE_CLAIMS: Optional[List[str]] = None
AXIOMS_ROLES_CLAIMS: Optional[List[str]] = None
AXIOMS_PERMISSIONS_CLAIMS: Optional[List[str]] = None
model_config = ConfigDict(
env_file=".env",
case_sensitive=True,
extra="allow",
)
# Global configuration instance
_config: Optional[AxiomsConfig] = None
[docs]
def get_config() -> AxiomsConfig:
"""Get the global Axioms configuration instance.
Returns:
AxiomsConfig: The configuration instance.
Raises:
RuntimeError: If configuration has not been initialized.
"""
if _config is None:
raise RuntimeError(
"Axioms configuration not initialized. "
"Call init_axioms() with your FastAPI app first."
)
return _config
[docs]
def set_config(config: AxiomsConfig) -> None:
"""Set the global Axioms configuration instance.
Args:
config: The AxiomsConfig instance to use globally.
"""
global _config
_config = config
[docs]
def init_axioms(app=None, **kwargs) -> AxiomsConfig:
"""Initialize Axioms configuration for a FastAPI application.
Args:
app: Optional FastAPI application instance.
**kwargs: Configuration parameters to override environment variables.
Returns:
AxiomsConfig: The initialized configuration.
Example::
from fastapi import FastAPI
from axioms_fastapi import init_axioms
app = FastAPI()
config = init_axioms(
app,
AXIOMS_AUDIENCE="api.example.com",
AXIOMS_DOMAIN="auth.example.com"
)
"""
config = AxiomsConfig(**kwargs)
set_config(config)
# Store config in app state if app is provided
if app is not None:
app.state.axioms_config = config
return config