69 |
69 |
return new_d
|
70 |
70 |
|
71 |
71 |
|
72 |
|
def print_dict(d, exclude=(), ident=0):
|
|
72 |
def print_dict(d,
|
|
73 |
exclude=(),
|
|
74 |
ident=0,
|
|
75 |
with_enumeration=False,
|
|
76 |
recursive_enumeration=False):
|
|
77 |
"""
|
|
78 |
Pretty-print a dictionary object
|
|
79 |
|
|
80 |
:param d: (dict) the input
|
|
81 |
|
|
82 |
:param excelude: (set or list) keys to exclude from printing
|
|
83 |
|
|
84 |
:param ident: (int) initial indentation (recursive)
|
|
85 |
|
|
86 |
:param with_enumeration: (bool) enumerate each 1st level key if true
|
|
87 |
|
|
88 |
:recursive_enumeration: (bool) recursively enumerate dicts and lists of
|
|
89 |
2nd level or deeper
|
|
90 |
|
|
91 |
:raises CLIError: (TypeError wrapper) non-dict input
|
|
92 |
"""
|
73 |
93 |
if not isinstance(d, dict):
|
74 |
94 |
raiseCLIError(TypeError('Cannot dict_print a non-dict object'))
|
75 |
95 |
|
... | ... | |
77 |
97 |
margin = max(len(unicode(key).strip())\
|
78 |
98 |
for key in d.keys() if key not in exclude)
|
79 |
99 |
|
|
100 |
counter = 1
|
80 |
101 |
for key, val in sorted(d.items()):
|
81 |
102 |
if key in exclude:
|
82 |
103 |
continue
|
83 |
|
print_str = ' ' * ident
|
|
104 |
print_str = ''
|
|
105 |
if with_enumeration:
|
|
106 |
print_str = '%s. ' % counter
|
|
107 |
counter += 1
|
|
108 |
print_str = '%s%s' % (' ' * (ident - len(print_str)), print_str)
|
84 |
109 |
print_str += ('%s' % key).strip()
|
85 |
110 |
print_str += ' ' * (margin - len(unicode(key).strip()))
|
86 |
111 |
print_str += ': '
|
87 |
112 |
if isinstance(val, dict):
|
88 |
113 |
print(print_str)
|
89 |
|
print_dict(val, exclude=exclude, ident=margin + ident)
|
|
114 |
print_dict(val,
|
|
115 |
exclude=exclude,
|
|
116 |
ident=margin + ident,
|
|
117 |
with_enumeration=recursive_enumeration,
|
|
118 |
recursive_enumeration=recursive_enumeration)
|
90 |
119 |
elif isinstance(val, list):
|
91 |
120 |
print(print_str)
|
92 |
|
print_list(val, exclude=exclude, ident=margin + ident)
|
|
121 |
print_list(val,
|
|
122 |
exclude=exclude,
|
|
123 |
ident=margin + ident,
|
|
124 |
with_enumeration=recursive_enumeration,
|
|
125 |
recursive_enumeration=recursive_enumeration)
|
93 |
126 |
else:
|
94 |
127 |
print print_str + ' ' + unicode(val).strip()
|
95 |
128 |
|
96 |
129 |
|
97 |
|
def print_list(l, exclude=(), ident=0, enumerate=False):
|
|
130 |
def print_list(l,
|
|
131 |
exclude=(),
|
|
132 |
ident=0,
|
|
133 |
with_enumeration=False,
|
|
134 |
recursive_enumeration=False):
|
|
135 |
"""
|
|
136 |
Pretty-print a list object
|
|
137 |
|
|
138 |
:param l: (list) the input
|
|
139 |
|
|
140 |
:param excelude: (object - anytype) values to exclude from printing
|
|
141 |
|
|
142 |
:param ident: (int) initial indentation (recursive)
|
|
143 |
|
|
144 |
:param with_enumeration: (bool) enumerate each 1st level value if true
|
|
145 |
|
|
146 |
:recursive_enumeration: (bool) recursively enumerate dicts and lists of
|
|
147 |
2nd level or deeper
|
|
148 |
|
|
149 |
:raises CLIError: (TypeError wrapper) non-list input
|
|
150 |
"""
|
98 |
151 |
if not isinstance(l, list):
|
99 |
152 |
raiseCLIError(TypeError('Cannot list_print a non-list object'))
|
100 |
153 |
|
... | ... | |
112 |
165 |
for item in sorted(l):
|
113 |
166 |
if item in exclude:
|
114 |
167 |
continue
|
115 |
|
elif enumerate:
|
|
168 |
elif with_enumeration:
|
116 |
169 |
prefix = '%s. ' % counter
|
117 |
170 |
counter += 1
|
118 |
171 |
prefix = '%s%s' % (' ' * (ident - len(prefix)), prefix)
|
... | ... | |
120 |
173 |
prefix = ' ' * ident
|
121 |
174 |
if isinstance(item, dict):
|
122 |
175 |
print('%s' % prefix)
|
123 |
|
print_dict(item, exclude=exclude, ident=margin + ident)
|
|
176 |
print_dict(item,
|
|
177 |
exclude=exclude,
|
|
178 |
ident=margin + ident,
|
|
179 |
with_enumeration=recursive_enumeration,
|
|
180 |
recursive_enumeration=recursive_enumeration)
|
124 |
181 |
elif isinstance(item, list):
|
125 |
182 |
print('%s' % prefix)
|
126 |
|
print_list(item, exclude=exclude, ident=margin + ident)
|
|
183 |
print_list(item,
|
|
184 |
exclude=exclude,
|
|
185 |
ident=margin + ident,
|
|
186 |
with_enumeration=recursive_enumeration,
|
|
187 |
recursive_enumeration=recursive_enumeration)
|
127 |
188 |
else:
|
128 |
189 |
print('%s%s' % (prefix, item))
|
129 |
190 |
|