Files
polygon/site/config_loader.py
T

53 lines
1.6 KiB
Python

"""
config_loader.py — загрузка сгенерированных YAML-конфигов сервисов.
Читает все .yaml из services/, строит два индекса:
- services: {service_id: service_def}
- ops_index: {svcOperationId: service_def} (для поиска по opId)
"""
import os
import yaml
YAML_EXTS = (".yaml", ".yml")
def load_services(services_dir="services"):
"""Загружает все сервисы из директории YAML-конфигов.
Возвращает (services, ops_index):
services — dict[service_id] = service_def
ops_index — dict[svcOperationId] = service_def
service_def содержит:
name, service_id, service_display_name, service_short_name,
lifecycle, operations, cfsParams, cfsParamsByOp,
stateParams, stateOut
"""
if not os.path.isdir(services_dir):
raise FileNotFoundError(f"Services directory not found: {services_dir}")
services = {}
ops_index = {}
for fname in sorted(os.listdir(services_dir)):
if not fname.lower().endswith(YAML_EXTS):
continue
path = os.path.join(services_dir, fname)
with open(path, "r", encoding="utf-8") as f:
cfg = yaml.safe_load(f)
if not cfg:
continue
svc_id = cfg["service_id"]
services[svc_id] = cfg
# Индекс по svcOperationId — для поиска «какому сервису принадлежит операция»
for op in cfg.get("operations", []):
ops_index[op["svcOperationId"]] = cfg
return services, ops_index