Reputation: 5664
Is it possible to disable creating anchors and references (and effectively list redundant data explicitly) either in PyYAML
or Ruby's Psych
engine?
Perhaps I missed something while searching the web, but it seems there are not many options available in Psych
and I was not able to determine if PyYAML
allows for that either.
The rationale is I have to serialize some data and pass it in a readable form to a not-really-technical co-worker for manual validation. Some data is redundant but I need it listed in a most explicit manner for readability (anchors and references are a nice concept for efficiency, but not for human-readability).
Ruby and Python are my tools of choice, but if there is some other reasonably simple way of 'unfolding' YAML documents, it might just do.
Upvotes: 5
Views: 2193
Reputation: 815
I found this related ticket on the PyYAML website (http://pyyaml.org/ticket/91), it looks like anchors can be disabled by using a custom dumper along the lines of:
import yaml
class ExplicitDumper(yaml.SafeDumper):
"""
A dumper that will never emit aliases.
"""
def ignore_aliases(self, data):
return True
So, for example, the following outputs can be achieved using the standard dumper and the new explicit dumper:
>>> yaml.dump([1L, 1L])
"[&id001 !!python/long '1', *id001]\n"
>>> yaml.dump([1L, 1L], Dumper=ExplicitDumper)
'[1, 1]\n'
You can customise further properties to ensure pretty-printing etc. in the yaml.dump(...)
call.
Upvotes: 9