The easiest way to do this is probably to rewrite the YAML constructor for tag:yaml.org,2002:map
so that it returns its own dictionary class instead of a regular dictionary.
import yaml class AttrDict(object): def __init__(self, attr): self._attr = attr def __getattr__(self, attr): try: return self._attr[attr] except KeyError: raise AttributeError def construct_map(self, node):
Note that this will break everything else in a process that uses YAML if it expects everything to work in the usual Python way. You can use a custom loader, but I personally find the PyYAML documentation a bit labyrinthine and it seems that the side effects are global and contagious, and not as an exception.
You have been warned.
Alternatively , if your schema is relatively static, you can write your own classes and deserialize them (e.g. class Config
with id
and name
properties). However, it probably would not be worth the cost of additional code.
source share