Add env_pro core modules
This commit is contained in:
57
app/env_pro/core/config.py
Normal file
57
app/env_pro/core/config.py
Normal file
@@ -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)
|
||||||
Reference in New Issue
Block a user