2018-06-25 01:40:16 +00:00
|
|
|
import gzip
|
|
|
|
import io
|
|
|
|
|
2018-06-25 00:21:47 +00:00
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
from . import errors
|
|
|
|
from .segments import SegmentData
|
2018-06-25 01:40:16 +00:00
|
|
|
from .utils import to_numpy
|
2018-06-25 00:21:47 +00:00
|
|
|
|
|
|
|
|
|
|
|
class DiskImageContainer:
|
|
|
|
def __init__(self, data):
|
2018-06-25 01:40:16 +00:00
|
|
|
self.unpacked = self.__unpack_raw_data(data)
|
|
|
|
|
|
|
|
def __unpack_raw_data(self, data):
|
|
|
|
raw = data.tobytes()
|
|
|
|
unpacked = self.unpack_bytes(raw)
|
|
|
|
return to_numpy(unpacked)
|
2018-06-25 00:21:47 +00:00
|
|
|
|
2018-06-25 01:40:16 +00:00
|
|
|
def unpack_bytes(self, byte_data):
|
2018-06-25 00:21:47 +00:00
|
|
|
pass
|
2018-06-25 01:40:16 +00:00
|
|
|
|
|
|
|
|
|
|
|
class GZipContainer(DiskImageContainer):
|
|
|
|
def unpack_bytes(self, byte_data):
|
|
|
|
try:
|
|
|
|
buf = io.BytesIO(byte_data)
|
|
|
|
with gzip.GzipFile(mode='rb', fileobj=buf) as f:
|
|
|
|
unpacked = f.read()
|
|
|
|
except OSError as e:
|
|
|
|
raise errors.InvalidContainer(e)
|
|
|
|
return unpacked
|