From bea039b0e440c7c12d0ffde78c5d5f542ecd6983 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Fri, 30 Jan 2026 23:35:11 +0000 Subject: [PATCH] Initial upload: CLI Explain Fix project with CI/CD workflow --- src/cli_explain_fix/config.py | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/cli_explain_fix/config.py diff --git a/src/cli_explain_fix/config.py b/src/cli_explain_fix/config.py new file mode 100644 index 0000000..64bef8a --- /dev/null +++ b/src/cli_explain_fix/config.py @@ -0,0 +1,74 @@ +"""Configuration management for CLI Explain Fix.""" + +import os +from pathlib import Path +from typing import Optional +from dataclasses import dataclass + +import yaml + + +@dataclass +class Config: + """User configuration for CLI Explain Fix.""" + default_language: str = "python" + output_format: str = "rich" + verbosity: int = 1 + theme: str = "default" + config_path: str = "~/.config/cli-explain-fix/config.yaml" + + @classmethod + def load(cls, path: Optional[str] = None) -> "Config": + """Load configuration from file with environment variable overrides.""" + if path is None: + path = cls.config_path + + expanded_path = os.path.expanduser(path) + config = cls() + + if os.path.exists(expanded_path): + try: + with open(expanded_path, 'r', encoding='utf-8') as f: + data = yaml.safe_load(f) or {} + if 'default_language' in data: + config.default_language = data['default_language'] + if 'output_format' in data: + config.output_format = data['output_format'] + if 'verbosity' in data: + config.verbosity = data['verbosity'] + if 'theme' in data: + config.theme = data['theme'] + except (yaml.YAMLError, OSError): + pass + + if os.environ.get('CLI_EXPLAIN_FIX_LANG'): + config.default_language = os.environ['CLI_EXPLAIN_FIX_LANG'] + if os.environ.get('CLI_EXPLAIN_FIX_OUTPUT'): + config.output_format = os.environ['CLI_EXPLAIN_FIX_OUTPUT'] + if os.environ.get('CLI_EXPLAIN_FIX_VERBOSE'): + try: + config.verbosity = int(os.environ['CLI_EXPLAIN_FIX_VERBOSE']) + except ValueError: + pass + if os.environ.get('CLI_EXPLAIN_FIX_THEME'): + config.theme = os.environ['CLI_EXPLAIN_FIX_THEME'] + + return config + + def save(self, path: Optional[str] = None) -> None: + """Save configuration to file.""" + if path is None: + path = self.config_path + + expanded_path = os.path.expanduser(path) + Path(expanded_path).parent.mkdir(parents=True, exist_ok=True) + + data = { + 'default_language': self.default_language, + 'output_format': self.output_format, + 'verbosity': self.verbosity, + 'theme': self.theme, + } + + with open(expanded_path, 'w', encoding='utf-8') as f: + yaml.dump(data, f, default_flow_style=False)