#!/usr/bin/env python3

import msgpack as mp
import sys
import pprint

def to_str_dict(vals):
  if isinstance(vals, dict):
    res = {}
    for (key, value) in vals.items():
      res[to_str_dict(key)] = to_str_dict(value)
    return res
  elif isinstance(vals, list):
    res = []
    for i in range(0, len(vals)):
      res.append(to_str_dict(vals[i]))
    return res
  elif isinstance(vals, bytes):
    try:
      unpacked = mp.unpackb(vals)
      return to_str_dict(unpacked)
    except Exception:
      return vals.decode("utf-8")
  elif isinstance(vals, int):
    return vals
  else:
    print(type(vals))
    return null


pp = pprint.PrettyPrinter(indent=4)

if '--help' in sys.argv:
  print(
'''Usage: ./unpack.py <filename>
OR curl <xconf-host>:<xconf-port>/list?type=mobile 2>/dev/null | ./unpack.py

Unpacks all binary data, packed using msgpack.
Reads data from specified file or from stdin.''')
  sys.exit(0)

if len(sys.argv) > 1:
  file = open(sys.argv[1], 'rb')
else:
  sys.stdin = sys.stdin.detach()
  file = sys.stdin

unpacked = mp.load(file)
unpacked = to_str_dict(unpacked)
pp.pprint(unpacked)


