53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
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)
|