DottedDict icon indicating copy to clipboard operation
DottedDict copied to clipboard

dottedDict does not work with yaml.dump

Open cmeissner opened this issue 3 years ago • 0 comments

If I try to dump a dottedDict via yaml.dump I get a KeyError.

To reproduce the behavior I use the following code:

#!/usr/bin/env python

import yaml

from dotted.utils import dot

path = 'foo.bar.baz'

data = dict(foo=dict(bar=dict(baz='blafasel')))
data = dot(data)

print(data)
print(data[path])

print(yaml.dump(data))

If you run this script the following Execption is raised:

$ ./travers_to_dict.py
{'foo': {'bar': {'baz': 'blafasel'}}}
blafasel
Traceback (most recent call last):
  File "./travers_to_dict.py", line 15, in <module>
    print(yaml.dump(data))
  File "/home/nero/.pyenv/versions/traverse_to_dict/lib/python3.8/site-packages/yaml/__init__.py", line 290, in dump
    return dump_all([data], stream, Dumper=Dumper, **kwds)
  File "/home/nero/.pyenv/versions/traverse_to_dict/lib/python3.8/site-packages/yaml/__init__.py", line 278, in dump_all
    dumper.represent(data)
  File "/home/nero/.pyenv/versions/traverse_to_dict/lib/python3.8/site-packages/yaml/representer.py", line 27, in represent
    node = self.represent_data(data)
  File "/home/nero/.pyenv/versions/traverse_to_dict/lib/python3.8/site-packages/yaml/representer.py", line 52, in represent_data
    node = self.yaml_multi_representers[data_type](self, data)
  File "/home/nero/.pyenv/versions/traverse_to_dict/lib/python3.8/site-packages/yaml/representer.py", line 317, in represent_object
    reduce = data.__reduce_ex__(2)
  File "/home/nero/.pyenv/versions/traverse_to_dict/lib/python3.8/site-packages/dotted/collection.py", line 266, in __getitem__
    return self.store[key]
KeyError: '__getstate__'

cmeissner avatar Feb 08 '21 16:02 cmeissner