I am trying to automatically convert
from omegaconf import OmegaConf
s = """
nodes:
node1:
group: standard
status: online
node2:
group: small
status: online
node3:
group: standard
status: offline
"""
into a list of nodes, where "node1/2/3" is the name of the node:
from dataclasses import dataclass
from typing import List
@dataclass
class Node:
name: str
group: str
status: str
@dataclass
class Config:
nodes: List[Node]
with
conf = OmegaConf.create(s)
schema = OmegaConf.structured(Config)
merged_conf = OmegaConf.merge(schema, conf)
Is there a mechanism in place for this? If I try it out-of-the-box I get
omegaconf.errors.ConfigTypeError: Cannot merge DictConfig with ListConfig
The error is telling you that you are attempting to merge a dictionary with a List, which is not supported. Your schema says that nodes is a
List[Node]
, but your YAML string contains a mapping (YAML terminology for a dictionary).Either change your schema to indicate that nodes is a Dict:
Or change your YAML string to contain a list: