Open
Description
Now that the default YAML library is ruamel.yaml
, and its notable feature is round trip comment preservation, my expectation is that this should work:
In [1]: from box import Box
In [2]: yaml_doc = """---
...: # This is my YAML doc
...: zlast: 1 # This is a line comment on zlast
...: afirst: 2 # This should be shown second, not first!"""
In [3]: mybox = Box.from_yaml(yaml_doc)
In [4]: print(mybox.to_yaml())
afirst: 2
zlast: 1
Unordered, and no comments! However ruamel.yaml
has RoundTripLoader
and RoundTripDumper
available!
In [8]: import ruamel.yaml as yaml
In [9]: data = yaml.load(yaml_doc, Loader=yaml.RoundTripLoader)
In [10]: print(yaml.dump(data, Dumper=yaml.RoundTripDumper))
# This is my YAML doc
zlast: 1 # This is a line comment on zlast
afirst: 2 # This should be shown second, not first!
But using them with Box only helps resolve the creation order issue -- the comments are gone:
In [11]: mybox = Box.from_yaml(yaml_doc, Loader=yaml.RoundTripLoader)
In [11]: print(mybox.to_yaml(Dumper=yaml.RoundTripDumper))
zlast: 1
afirst: 2
Naturally -- as the incoming data
is unrolled into a Box in the constructor:
Line 223 in 4a50512
I'm not sure if there's reasonable way for Box to coexist with the ruamel.yaml.CommentedMap
, but it would be VERY convenient to work with my YAML files in box dot notation, while leaving the human readable comments intact.