def read_msgpack_stream(filename_or_stream, offsets=False):
if hasattr(filename_or_stream, 'read'):
stream = filename_or_stream
else:
stream = open(filename_or_stream, 'rb')
unpacker = msgpack.Unpacker(stream, encoding=encoding)
repacker = msgpack.Packer(encoding=encoding)
offset = 0
for value in unpacker:
if offsets:
yield (value, offset)
offset += len(repacker.pack(value))
else:
yield value