Files
MediaManager/media_manager/config.py
Marcel Hellwig 96b84d45db Adding some more new lints (#393)
Enable `UP` and `TRY` lint
2026-02-01 18:04:15 +01:00

86 lines
2.7 KiB
Python

import logging
import os
from pathlib import Path
from pydantic import AnyHttpUrl
from pydantic_settings import (
BaseSettings,
PydanticBaseSettingsSource,
SettingsConfigDict,
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
log = logging.getLogger(__name__)
config_path = os.getenv("CONFIG_FILE")
if config_path is None:
# Default to config folder approach
config_dir = os.getenv("CONFIG_DIR", "/app/config")
config_path = Path(config_dir) / "config.toml"
else:
config_path = Path(config_path)
log.info(f"Using config file {config_path}")
class LibraryItem(BaseSettings):
name: str
path: str
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 = AnyHttpUrl("http://localhost:8000")
cors_urls: list[str] = []
development: bool = False
tv_libraries: list[LibraryItem] = []
movie_libraries: list[LibraryItem] = []
class MediaManagerConfig(BaseSettings):
model_config = SettingsConfigDict(
toml_file=config_path,
case_sensitive=False,
env_nested_delimiter="__",
env_prefix="MEDIAMANAGER_",
)
"""
This class is used to load all configurations from the environment variables.
It combines the BasicConfig with any additional configurations needed.
"""
misc: BasicConfig = BasicConfig()
torrents: TorrentConfig = TorrentConfig()
notifications: NotificationConfig = NotificationConfig()
metadata: MetadataProviderConfig = MetadataProviderConfig()
indexers: IndexerConfig = IndexerConfig()
database: DbConfig = DbConfig()
auth: AuthConfig = 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,
)