Source code for f_lib.logging.settings._logging_settings
"""Logging configuration model."""
from __future__ import annotations
from typing import TYPE_CHECKING
from pydantic_settings import BaseSettings
from pydantic_settings import SettingsConfigDict as BaseSettingsConfigDict
from ._console_logging_settings import ConsoleLoggingSettings
from ._sources import PyprojectTomlConfigSettingsSource
if TYPE_CHECKING:
from pydantic_settings import PydanticBaseSettingsSource
class _SettingsConfigDict(BaseSettingsConfigDict, total=False):
"""Overrides SettingsConfigDict to add pyproject.toml settings."""
toml_table_path: tuple[str, ...]
"""Path to the table to load.
.. rubric:: Example
.. code-block:: toml
:caption: pyproject.toml
[tool.poetry]
.. code-block:: python
SettingsConfigDict(toml_table_path=("tool", "poetry"))
"""
[docs]
class LoggingSettings(BaseSettings):
"""Top-level logging settings."""
model_config = _SettingsConfigDict(
env_ignore_empty=True,
env_nested_delimiter="__",
env_prefix="F_LOGGING_",
toml_table_path=("tool", "f", "logging"),
)
console: ConsoleLoggingSettings = ConsoleLoggingSettings()
"""Settings for console logging."""
[docs]
@classmethod
def settings_customise_sources( # cspell:ignore customise
cls,
settings_cls: type[BaseSettings],
init_settings: PydanticBaseSettingsSource,
env_settings: PydanticBaseSettingsSource,
dotenv_settings: PydanticBaseSettingsSource,
file_secret_settings: PydanticBaseSettingsSource,
) -> tuple[PydanticBaseSettingsSource, ...]:
"""Enable ``pyproject.toml`` source."""
return (
PyprojectTomlConfigSettingsSource(settings_cls),
dotenv_settings,
env_settings,
file_secret_settings,
init_settings,
)
def __bool__(self) -> bool:
return True