Files
MediaManager/media_manager/config.py
2025-07-11 11:19:59 +02:00

72 lines
2.3 KiB
Python

import os
from pathlib import Path
from typing import Type, Tuple
from pydantic import AnyHttpUrl
from pydantic_settings import (
BaseSettings,
SettingsConfigDict,
PydanticBaseSettingsSource,
TomlConfigSettingsSource,
)
from media_manager.auth.config import AuthConfig
from media_manager.database.config import DbConfig
from media_manager.indexer.config import IndexerConfig
from media_manager.metadataProvider.config import MetadataProviderConfig
from media_manager.notification.config import NotificationConfig
from media_manager.torrent.config import TorrentConfig
config_path = os.getenv("CONFIG_FILE")
if config_path is None:
config_path = Path(__file__).parent.parent / "data" / "config.toml"
else:
config_path = Path(config_path)
class BasicConfig(BaseSettings):
image_directory: Path = Path(__file__).parent.parent / "data" / "images"
tv_directory: Path = Path(__file__).parent.parent / "data" / "tv"
movie_directory: Path = Path(__file__).parent.parent / "data" / "movies"
torrent_directory: Path = Path(__file__).parent.parent / "data" / "torrents"
frontend_url: AnyHttpUrl = "http://localhost:3000/"
cors_urls: list[str] = []
development: bool = False
api_base_path: str = "/api/v1"
class AllEncompassingConfig(BaseSettings):
model_config = SettingsConfigDict(
toml_file=config_path, case_sensitive=False, env_nested_delimiter="_"
)
"""
This class is used to load all configurations from the environment variables.
It combines the BasicConfig with any additional configurations needed.
"""
misc: BasicConfig
torrents: TorrentConfig
notifications: NotificationConfig
metadata: MetadataProviderConfig
indexers: IndexerConfig
database: DbConfig
auth: AuthConfig
@classmethod
def settings_customise_sources(
cls,
settings_cls: Type[BaseSettings],
init_settings: PydanticBaseSettingsSource,
env_settings: PydanticBaseSettingsSource,
dotenv_settings: PydanticBaseSettingsSource,
file_secret_settings: PydanticBaseSettingsSource,
) -> Tuple[PydanticBaseSettingsSource, ...]:
return (
init_settings,
env_settings,
dotenv_settings,
TomlConfigSettingsSource(settings_cls),
file_secret_settings,
)