def augment(path,o, parent=None): """Descend recursively""" from ambry.identity import ObjectNumber path_num = ObjectNumber.base62_decode(''.join( ObjectNumber.base62_encode(e[1]).zfill(2) for e in path )) objects = [] if isinstance(o, dict): for i,(k,v) in enumerate(o.items(),1): objects += augment(path+[ (k,i,) ], v, k) o['path'] = tuple(path) o['path_num'] = path_num o['parent'] = parent if parent else 'root' objects += [{ k:v for k,v in o.items() if not isinstance(v,(list,dict))}] elif isinstance(o, list): for i, v in enumerate(o,1): objects += augment(path+[ (i,i,) ], v, parent) return objects