+def todump_items(k, v, level):
+ klen = len(k) if k else 0
+ spaces = ' ' * level + ' ' * (klen + 3)
+ wrapper = textwrap.TextWrapper(initial_indent="", subsequent_indent=spaces, width=60)
+ s = ''
+ if type(v) is dict:
+ if k:
+ s += ' ' * level + '{}:\n'.format(k)
+ for k2, v2 in v.items():
+ s += todump_items(k2, v2, level + 1)
+ return s
+
+ if type(v) is list:
+ for v2 in v:
+ s += '{}'.format(todump_items(k, v2, level))
+ return s
+
+ if type(v) is bytes:
+ w = wrapper.fill(bytes.hex(v))
+ s += ' ' * level + '{}: {}\n'.format(k, w)
+ else:
+ if type(v) is str:
+ v = wrapper.fill(v)
+ s += ' ' * level + '{}: {}\n'.format(k, v)
+ return s
+
+
+def todump(messages, services):
+ import pprint
+ pp = pprint.PrettyPrinter()
+
+ s = ''
+ for m in messages:
+ if m['name'] not in services:
+ s += '# ignoring reply message: {}\n'.format(m['name'])
+ continue
+ #if m['name'] in message_filter:
+ # s += '# ignoring message {}\n'.format(m['name'])
+ # continue
+ for k in argument_filter:
+ try:
+ m['args'].pop(k)
+ except KeyError:
+ pass
+ a = pp.pformat(m['args'])
+ s += '{}:\n'.format(m['name'])
+ s += todump_items(None, m['args'], 0)
+ return s
+