import os from pathlib import Path class Config: def __init__(self) -> None: self.host = os.getenv('HOST') or '0.0.0.0' self.port = int(os.getenv('PORT') or 4009) # This directory will be searched for .txt (e.g. yandex.txt) # Cookies are in Netscape CSV format, see yt-dlp docs self.cookies_dir = Path(os.getenv('COOKIES_DIR') or 'cookies') self.tmpl = os.path.join( # 1. `artists.0` instead of `artist`, because the latter can contain "feat. ..." # 2. as for %(field)S, see https://git.dc09.ru/DarkCat09/musicdlp/issues/3#issuecomment-210 os.getenv('ALBUM_PATH_TMPL') or 'music/%(artists.0)S/%(album)S', os.getenv('TRACK_FILE_TMPL') or '%(track)S.%(ext)s', ) # `or None` -- defaults to None also if PROXY is an empty string self.proxy = os.getenv('PROXY') or None self.save_lyrics = _parse_bool(os.getenv('SAVE_LYRICS'), True) self.save_cover = _parse_bool(os.getenv('SAVE_COVER'), True) _config: Config | None = None def get() -> Config: global _config if _config is None: _config = Config() return _config def _parse_bool(val: str | None, default: bool) -> bool: if val is None: return default if val in {'false', 'off', 'no', '0'}: return False return bool(val)