diff --git a/app/env_pro/core/config.py b/app/env_pro/core/config.py new file mode 100644 index 0000000..5ca493f --- /dev/null +++ b/app/env_pro/core/config.py @@ -0,0 +1,57 @@ +"""Configuration management for env-pro.""" + +import os +from pathlib import Path +from typing import Optional +import yaml + + +class Config: + """Configuration management class.""" + + def __init__(self, config_home: Optional[Path] = None): + """Initialize configuration.""" + if config_home is None: + config_home = Path(os.environ.get("ENV_PRO_HOME", "~/.config/env-pro")) + self.config_home = config_home.expanduser() + self.config_file = self.config_home / "config.yaml" + + def get(self, key: str, default=None): + """Get a configuration value.""" + config = self._load_config() + return config.get(key, default) + + def set(self, key: str, value): + """Set a configuration value.""" + config = self._load_config() + config[key] = value + self._save_config(config) + + def _load_config(self) -> dict: + """Load configuration from file.""" + if self.config_file.exists(): + try: + with open(self.config_file, 'r') as f: + return yaml.safe_load(f) or {} + except yaml.YAMLError: + return {} + return {} + + def _save_config(self, config: dict): + """Save configuration to file.""" + self.config_home.mkdir(parents=True, exist_ok=True) + with open(self.config_file, 'w') as f: + yaml.dump(config, f) + + def get_keyring_path(self) -> str: + """Get the keyring service name for storing keys.""" + return self.get("keyring_service", "env-pro") + + def set_keyring_path(self, service: str): + """Set the keyring service name.""" + self.set("keyring_service", service) + + +def get_config(config_home: Optional[Path] = None) -> Config: + """Get the global configuration instance.""" + return Config(config_home)