Initial upload: CLI Explain Fix project with CI/CD workflow
This commit is contained in:
74
src/cli_explain_fix/config.py
Normal file
74
src/cli_explain_fix/config.py
Normal 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)
|
||||
Reference in New Issue
Block a user