It makes PyYAML more convenient and avoids duplicate YAML data.
Here are the features:
- By deafult, it uses name of class as the yaml_tag of YAMLObject.
- It loads anchor & as an attribute anchor of YAMLObject instance.
- It dumps the attribute anchor of YAMLObject instance as the anchor & name.
Here is a yaml file:
%YAML 1.1
---
examples:
- !Example &first
data: I am the first one.
- !Example &second
data: I am the second one.
order:
- *first
- *second
The following code is taken from test_enhanced.py.
import enhancedyaml
class Example(enhancedyaml.YAMLObject): pass
Code:
from pprint import pprint
data = enhancedyaml.load(open('data/enhanced_data.yaml'))
pprint(data)
Output:
{'examples': [<__main__.Example object at 0x7fa825fb4fd0>,
<__main__.Example object at 0x7fa825fb4cd0>],
'order': [<__main__.Example object at 0x7fa825fb4fd0>,
<__main__.Example object at 0x7fa825fb4cd0>]}
Code:
pprint(list(example.__dict__ for example in data['order']))
Output:
[{'anchor': u'first', 'data': 'I am the first one.'},
{'anchor': u'second', 'data': 'I am the second one.'}]
Example has addational attribute anchor.
Code:
print enhancedyaml.dump(data, default_flow_style=False)
Output:
examples:
- &first !Example
data: I am the first one.
- &second !Example
data: I am the second one.
order:
- *first
- *second
It is almost same as the original YAML.
Code:
e1 = Example()
e2 = Example()
e1.data = "I don't have `anchor`."
e2.data = "I don't have `anchor`, too."
es = [e1, e2, e2, e1]
print enhancedyaml.dump(es, default_flow_style=False)
Output:
- &example002 !Example
data: I don't have `anchor`.
- &example001 !Example
data: I don't have `anchor`, too.
- *example001
- *example002
Here are more examples.
Have fun!