from pathlib import Path from dataclasses import dataclass from argparse import ArgumentParser from typing import List from os import getenv from sys import argv from xdg.BaseDirectory import xdg_cache_home @dataclass class Config: cache_file: Path = Path(xdg_cache_home) / Path("spotify-shortcuts.json") client_id: str | None = None client_secret: str | None = None def load_config(args: List[str] = argv[1:]) -> Config: parser = ArgumentParser(description="Spotify CLI Tool") parser.add_argument( "--cache-file", type=Path, default=Config.cache_file, help="Path to the cache file for Spotify authentication", ) parser.add_argument( "--client-id", type=str, default=Config.client_id, help="Spotify API Client ID", ) parser.add_argument( "--client-secret", type=str, default=Config.client_secret, help="Spotify API Client Secret", ) ns = parser.parse_args(args) cfg = Config( cache_file=ns.cache_file, client_id=ns.client_id, client_secret=ns.client_secret, ) return Config( cache_file=Path(getenv("SPOTIFY_SHORTCUTS_CACHE_FILE", cfg.cache_file)), client_id=getenv("SPOTIFY_SHORTCUTS_CLIENT_ID", cfg.client_id), client_secret=getenv("SPOTIFY_SHORTCUTS_CLIENT_SECRET", cfg.client_secret), )