from dataclasses import dataclass from typing import Optional import json import os @dataclass class HanaConfig: company: str server: str port: int user: str password: str @dataclass class ServiceLayerConfig: url: str username: str password: str maxpagesize: int b1s_replacecollectionsonpatch: bool @dataclass class Config: hana: HanaConfig service_layer: ServiceLayerConfig @staticmethod def load(path: str = "config.json") -> 'Config': if not os.path.exists(path): raise FileNotFoundError(f"No se encontró el archivo de configuración: {path}") with open(path, 'r', encoding='utf-8') as f: data = json.load(f) hana_data = data.get('hana', {}) service_layer_data = data.get('service_layer', {}) # Validar campos requeridos para HANA required_hana = ['company', 'server', 'port', 'user', 'password'] for field in required_hana: if field not in hana_data: raise KeyError(f"Falta el campo requerido '{field}' en la sección 'hana' de {path}") # Validar campos requeridos para Service Layer required_service_layer = ['url', 'username', 'password', 'maxpagesize', 'b1s_replacecollectionsonpatch'] for field in required_service_layer: if field not in service_layer_data: raise KeyError(f"Falta el campo requerido '{field}' en la sección 'service_layer' de {path}") hana = HanaConfig(**hana_data) service_layer = ServiceLayerConfig(**service_layer_data) return Config(hana=hana, service_layer=service_layer)