feat(hooks): add git hooks management CLI
This commit is contained in:
24 files changed
+1221
-531
No files matched your search
+33
-28
@@ -1,71 +1,75 @@
|
||||
"""
|
||||
Shared configuration system.
|
||||
"""
|
||||
|
||||
import os
|
||||
import yaml
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
|
||||
class BaseConfig:
|
||||
"""Base configuration class."""
|
||||
|
||||
|
||||
def __init__(self, default_config: Dict[str, Any] = None):
|
||||
"""Initialize base configuration.
|
||||
|
||||
|
||||
Args:
|
||||
default_config: Default configuration values
|
||||
"""
|
||||
self._config = default_config or {}
|
||||
|
||||
|
||||
def get(self, key: str, default: Any = None) -> Any:
|
||||
"""Get a configuration value.
|
||||
|
||||
|
||||
Args:
|
||||
key: Configuration key
|
||||
default: Default value if key not found
|
||||
|
||||
|
||||
Returns:
|
||||
Configuration value
|
||||
"""
|
||||
return self._config.get(key, default)
|
||||
|
||||
|
||||
def set(self, key: str, value: Any) -> None:
|
||||
"""Set a configuration value.
|
||||
|
||||
|
||||
Args:
|
||||
key: Configuration key
|
||||
value: Configuration value
|
||||
"""
|
||||
self._config[key] = value
|
||||
|
||||
|
||||
def delete(self, key: str) -> None:
|
||||
"""Delete a configuration value.
|
||||
|
||||
|
||||
Args:
|
||||
key: Configuration key
|
||||
"""
|
||||
if key in self._config:
|
||||
del self._config[key]
|
||||
|
||||
|
||||
def get_all(self) -> Dict[str, Any]:
|
||||
"""Get all configuration values.
|
||||
|
||||
|
||||
Returns:
|
||||
Dictionary of all configuration values
|
||||
"""
|
||||
return self._config.copy()
|
||||
|
||||
|
||||
def clear(self) -> None:
|
||||
"""Clear all configuration values."""
|
||||
self._config = {}
|
||||
|
||||
|
||||
def validate(self) -> bool:
|
||||
"""Override in subclasses for validation logic."""
|
||||
return True
|
||||
|
||||
def get_env_or_config(self, key: str, env_var: Optional[str] = None) -> Optional[str]:
|
||||
|
||||
def get_env_or_config(
|
||||
self, key: str, env_var: Optional[str] = None
|
||||
) -> Optional[str]:
|
||||
"""Get value from environment variable or config.
|
||||
|
||||
|
||||
Args:
|
||||
key: Configuration key
|
||||
env_var: Environment variable name (defaults to key.upper())
|
||||
@@ -73,9 +77,10 @@ class BaseConfig:
|
||||
env_var = env_var or key.upper()
|
||||
return self._config.get(key) or os.getenv(env_var)
|
||||
|
||||
|
||||
class Config(BaseConfig):
|
||||
"""Configuration manager for devtools."""
|
||||
|
||||
|
||||
def __init__(self):
|
||||
"""Initialize configuration."""
|
||||
super().__init__()
|
||||
@@ -83,19 +88,19 @@ class Config(BaseConfig):
|
||||
self.config_file = self.config_dir / "config.yaml"
|
||||
self._ensure_config_dir()
|
||||
self._load_config()
|
||||
|
||||
|
||||
def _get_config_dir(self) -> Path:
|
||||
"""Get the configuration directory.
|
||||
|
||||
|
||||
Returns:
|
||||
Path to config directory
|
||||
"""
|
||||
return Path.home() / ".devtools"
|
||||
|
||||
|
||||
def _ensure_config_dir(self) -> None:
|
||||
"""Ensure configuration directory exists."""
|
||||
self.config_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
|
||||
def _load_config(self) -> None:
|
||||
"""Load configuration from file."""
|
||||
if self.config_file.exists():
|
||||
@@ -103,32 +108,32 @@ class Config(BaseConfig):
|
||||
self._config = yaml.safe_load(f) or {}
|
||||
else:
|
||||
self._config = {}
|
||||
|
||||
|
||||
def _save_config(self) -> None:
|
||||
"""Save configuration to file."""
|
||||
with open(self.config_file, "w") as f:
|
||||
yaml.dump(self._config, f, default_flow_style=False, sort_keys=False)
|
||||
|
||||
|
||||
def set(self, key: str, value: Any) -> None:
|
||||
"""Set a configuration value.
|
||||
|
||||
|
||||
Args:
|
||||
key: Configuration key
|
||||
value: Configuration value
|
||||
"""
|
||||
super().set(key, value)
|
||||
self._save_config()
|
||||
|
||||
|
||||
def delete(self, key: str) -> None:
|
||||
"""Delete a configuration value.
|
||||
|
||||
|
||||
Args:
|
||||
key: Configuration key
|
||||
"""
|
||||
super().delete(key)
|
||||
self._save_config()
|
||||
|
||||
|
||||
def clear(self) -> None:
|
||||
"""Clear all configuration values."""
|
||||
super().clear()
|
||||
self._save_config()
|
||||
self._save_config()
|
||||
Reference in new issue
Block a user