Files
JARVIS/backend/app/tools/configs/loader.py

62 lines
1.9 KiB
Python
Raw Normal View History

"""
Config Loader
Loads and caches tool configurations from YAML files.
"""
import yaml
from pathlib import Path
from typing import Dict, Any, Optional
class ConfigLoader:
"""Tool configuration loader with caching support"""
def __init__(self, config_dir: Optional[Path] = None):
if config_dir is None:
config_dir = Path(__file__).parent
self.config_dir = Path(config_dir)
self._cache: Dict[str, Any] = {}
def load(self, tool_name: str) -> Dict[str, Any]:
"""Load configuration for a specific tool"""
if tool_name in self._cache:
return self._cache[tool_name]
config_file = self.config_dir / f"{tool_name}.yaml"
if not config_file.exists():
# Try without .yaml extension
config_file = self.config_dir / tool_name
if not config_file.exists():
return {}
with open(config_file, encoding="utf-8") as f:
config = yaml.safe_load(f) or {}
self._cache[tool_name] = config
return config
def reload(self, tool_name: str) -> Dict[str, Any]:
"""Reload configuration for a specific tool"""
if tool_name in self._cache:
del self._cache[tool_name]
return self.load(tool_name)
def get(self, tool_name: str, key: str, default: Any = None) -> Any:
"""Get a specific configuration value"""
config = self.load(tool_name)
return config.get(key, default)
def clear_cache(self) -> None:
"""Clear the configuration cache"""
self._cache.clear()
def load_all(self) -> Dict[str, Dict[str, Any]]:
"""Load all configuration files in the config directory"""
all_configs = {}
for config_file in self.config_dir.glob("*.yaml"):
tool_name = config_file.stem
all_configs[tool_name] = self.load(tool_name)
return all_configs