1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
from __future__ import print_function
"""
helper routines for testing round trip of commented YAML data
"""
import textwrap
import ruamel.yaml
def dedent(data):
try:
position_of_first_newline = data.index('\n')
for idx in range(position_of_first_newline):
if not data[idx].isspace():
raise ValueError
except ValueError:
pass
else:
data = data[position_of_first_newline+1:]
return textwrap.dedent(data)
def round_trip_load(inp):
dinp = dedent(inp)
return ruamel.yaml.load(dinp, ruamel.yaml.RoundTripLoader)
def round_trip_dump(data, indent=None, block_seq_indent=None, top_level_colon_align=None,
prefix_colon=None):
return ruamel.yaml.round_trip_dump(data,
indent=indent, block_seq_indent=block_seq_indent,
top_level_colon_align=top_level_colon_align,
prefix_colon=prefix_colon)
def round_trip(inp, outp=None, extra=None, intermediate=None, indent=None,
block_seq_indent=None, top_level_colon_align=None, prefix_colon=None):
if outp is None:
outp = inp
doutp = dedent(outp)
if extra is not None:
doutp += extra
data = round_trip_load(inp)
if intermediate is not None:
if isinstance(intermediate, dict):
for k, v in intermediate.items():
if data[k] != v:
print('{0!r} <> {1!r}'.format(data[k], v))
raise ValueError
res = round_trip_dump(data, indent=indent, block_seq_indent=block_seq_indent,
top_level_colon_align=top_level_colon_align,
prefix_colon=prefix_colon)
print('roundtrip data:\n', res, sep='')
assert res == doutp
res = round_trip_dump(data, indent=indent, block_seq_indent=block_seq_indent,
top_level_colon_align=top_level_colon_align,
prefix_colon=prefix_colon)
print('roundtrip second round data:\n', res, sep='')
assert res == doutp
|