import os from pathlib import Path from typing import Any, Dict, Optional import yaml class ConfigManager: """Configuration management utilities for YAML config""" def __init__(self, config_path: Optional[Path] = None): if config_path is None: # Use default location in user's home directory self.config_path = Path.home() / ".garmin-sync" / "config.yaml" self.config_path.parent.mkdir(exist_ok=True) else: self.config_path = config_path self.config_path.parent.mkdir(parents=True, exist_ok=True) self.config = self._load_config() def _load_config(self) -> Dict[str, Any]: """Load configuration from YAML file""" if self.config_path.exists(): with open(self.config_path, "r") as f: return yaml.safe_load(f) or {} else: # Return default configuration default_config = { "api_base_url": "https://api.garmin.com", "default_timeout": 30, "output_format": "table", # Options: table, json, csv "remember_login": True, } self._save_config(default_config) return default_config def _save_config(self, config: Dict[str, Any]) -> None: """Save configuration to YAML file""" with open(self.config_path, "w") as f: yaml.dump(config, f) def get(self, key: str, default: Any = None) -> Any: """Get a configuration value""" return self.config.get(key, default) def set(self, key: str, value: Any) -> None: """Set a configuration value""" self.config[key] = value self._save_config(self.config) def update(self, updates: Dict[str, Any]) -> None: """Update multiple configuration values""" self.config.update(updates) self._save_config(self.config)