Initial upload: CLI Explain Fix project with CI/CD workflow
Some checks failed
CI / build (push) Has been cancelled
CI / test (push) Has been cancelled

This commit is contained in:
2026-01-30 23:35:11 +00:00
parent 321103bf8c
commit bea039b0e4

View File

@@ -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)