almosther isolating soleprint

This commit is contained in:
buenosairesam
2025-12-24 07:10:08 -03:00
parent d62337e7ba
commit 33ee1b44cd
28 changed files with 1417 additions and 114 deletions

View File

@@ -0,0 +1,130 @@
"""
Configuration Loader
Loads and validates framework configuration files.
"""
import json
from pathlib import Path
from typing import Dict, Any, List, Optional
from dataclasses import dataclass
@dataclass
class FrameworkConfig:
"""Framework metadata"""
name: str
slug: str
version: str
description: str
tagline: str
icon: str
hub_port: int
@dataclass
class SystemConfig:
"""System configuration"""
key: str
name: str
slug: str
title: str
tagline: str
port: int
icon: str
@dataclass
class ComponentConfig:
"""Component configuration"""
name: str
title: str
description: str
plural: Optional[str] = None
formula: Optional[str] = None
class ConfigLoader:
"""Loads and parses framework configuration"""
def __init__(self, config_path: Path):
self.config_path = Path(config_path)
self.raw_config: Dict[str, Any] = {}
self.framework: Optional[FrameworkConfig] = None
self.systems: List[SystemConfig] = []
self.components: Dict[str, Dict[str, ComponentConfig]] = {}
def load(self) -> 'ConfigLoader':
"""Load configuration from file"""
with open(self.config_path) as f:
self.raw_config = json.load(f)
self._parse_framework()
self._parse_systems()
self._parse_components()
return self
def _parse_framework(self):
"""Parse framework metadata"""
fw = self.raw_config['framework']
self.framework = FrameworkConfig(**fw)
def _parse_systems(self):
"""Parse system configurations"""
for sys in self.raw_config['systems']:
self.systems.append(SystemConfig(**sys))
def _parse_components(self):
"""Parse component configurations"""
comps = self.raw_config['components']
# Shared components
self.components['shared'] = {}
for key, value in comps.get('shared', {}).items():
self.components['shared'][key] = ComponentConfig(**value)
# System-specific components
for system_key in ['data_flow', 'documentation', 'execution']:
self.components[system_key] = {}
for comp_key, comp_value in comps.get(system_key, {}).items():
self.components[system_key][comp_key] = ComponentConfig(**comp_value)
def get_system(self, key: str) -> Optional[SystemConfig]:
"""Get system config by key"""
for sys in self.systems:
if sys.key == key:
return sys
return None
def get_component(self, system_key: str, component_key: str) -> Optional[ComponentConfig]:
"""Get component config"""
return self.components.get(system_key, {}).get(component_key)
def get_shared_component(self, key: str) -> Optional[ComponentConfig]:
"""Get shared component config"""
return self.components.get('shared', {}).get(key)
def load_config(config_path: str | Path) -> ConfigLoader:
"""Load and validate configuration file"""
loader = ConfigLoader(config_path)
return loader.load()
if __name__ == "__main__":
# Test with pawprint config
import sys
config_path = Path(__file__).parent.parent / "pawprint.config.json"
loader = load_config(config_path)
print(f"Framework: {loader.framework.name} v{loader.framework.version}")
print(f"Tagline: {loader.framework.tagline}")
print(f"\nSystems:")
for sys in loader.systems:
print(f" {sys.icon} {sys.title} ({sys.name}) - {sys.tagline}")
print(f"\nShared Components:")
for key, comp in loader.components['shared'].items():
print(f" {comp.name} - {comp.description}")