pep8, pylint work. closes #94.

This commit is contained in:
jevans 2013-08-01 18:08:42 -04:00
commit 586e810a7f

View file

@ -78,65 +78,63 @@ class Codestream(object):
Supplying False may impose a large performance penalty. Supplying False may impose a large performance penalty.
""" """
# Map each of the known markers to a method that processes them. # Map each of the known markers to a method that processes them.
process_marker_segment = { process_marker_segment = {0xff00: self._parse_reserved_segment,
0xff00: self._parse_reserved_segment, 0xff01: self._parse_reserved_segment,
0xff01: self._parse_reserved_segment, 0xff30: self._parse_reserved_marker,
0xff30: self._parse_reserved_marker, 0xff31: self._parse_reserved_marker,
0xff31: self._parse_reserved_marker, 0xff32: self._parse_reserved_marker,
0xff32: self._parse_reserved_marker, 0xff33: self._parse_reserved_marker,
0xff33: self._parse_reserved_marker, 0xff34: self._parse_reserved_marker,
0xff34: self._parse_reserved_marker, 0xff35: self._parse_reserved_marker,
0xff35: self._parse_reserved_marker, 0xff36: self._parse_reserved_marker,
0xff36: self._parse_reserved_marker, 0xff37: self._parse_reserved_marker,
0xff37: self._parse_reserved_marker, 0xff38: self._parse_reserved_marker,
0xff38: self._parse_reserved_marker, 0xff39: self._parse_reserved_marker,
0xff39: self._parse_reserved_marker, 0xff3a: self._parse_reserved_marker,
0xff3a: self._parse_reserved_marker, 0xff3b: self._parse_reserved_marker,
0xff3b: self._parse_reserved_marker, 0xff3c: self._parse_reserved_marker,
0xff3c: self._parse_reserved_marker, 0xff3d: self._parse_reserved_marker,
0xff3d: self._parse_reserved_marker, 0xff3e: self._parse_reserved_marker,
0xff3e: self._parse_reserved_marker, 0xff3f: self._parse_reserved_marker,
0xff3f: self._parse_reserved_marker, 0xff4f: self._parse_reserved_segment,
0xff4f: self._parse_reserved_segment, 0xff50: self._parse_reserved_segment,
0xff50: self._parse_reserved_segment, 0xff51: self._parse_siz_segment,
0xff51: self._parse_siz_segment, 0xff52: self._parse_cod_segment,
0xff52: self._parse_cod_segment, 0xff53: self._parse_coc_segment,
0xff53: self._parse_coc_segment, 0xff54: self._parse_reserved_segment,
0xff54: self._parse_reserved_segment, 0xff55: self._parse_tlm_segment,
0xff55: self._parse_tlm_segment, 0xff56: self._parse_reserved_segment,
0xff56: self._parse_reserved_segment, 0xff57: self._parse_reserved_segment,
0xff57: self._parse_reserved_segment, 0xff58: self._parse_plt_segment,
0xff58: self._parse_plt_segment, 0xff59: self._parse_reserved_segment,
0xff59: self._parse_reserved_segment, 0xff5a: self._parse_reserved_segment,
0xff5a: self._parse_reserved_segment, 0xff5b: self._parse_reserved_segment,
0xff5b: self._parse_reserved_segment, 0xff5c: self._parse_qcd_segment,
0xff5c: self._parse_qcd_segment, 0xff5d: self._parse_qcc_segment,
0xff5d: self._parse_qcc_segment, 0xff5e: self._parse_rgn_segment,
0xff5e: self._parse_rgn_segment, 0xff5f: self._parse_pod_segment,
0xff5f: self._parse_pod_segment, 0xff60: self._parse_ppm_segment,
0xff60: self._parse_ppm_segment, 0xff61: self._parse_ppt_segment,
0xff61: self._parse_ppt_segment, 0xff62: self._parse_reserved_segment,
0xff62: self._parse_reserved_segment, 0xff63: self._parse_crg_segment,
0xff63: self._parse_crg_segment, 0xff64: self._parse_cme_segment,
0xff64: self._parse_cme_segment, 0xff65: self._parse_reserved_segment,
0xff65: self._parse_reserved_segment, 0xff66: self._parse_reserved_segment,
0xff66: self._parse_reserved_segment, 0xff67: self._parse_reserved_segment,
0xff67: self._parse_reserved_segment, 0xff68: self._parse_reserved_segment,
0xff68: self._parse_reserved_segment, 0xff69: self._parse_reserved_segment,
0xff69: self._parse_reserved_segment, 0xff6a: self._parse_reserved_segment,
0xff6a: self._parse_reserved_segment, 0xff6b: self._parse_reserved_segment,
0xff6b: self._parse_reserved_segment, 0xff6c: self._parse_reserved_segment,
0xff6c: self._parse_reserved_segment, 0xff6d: self._parse_reserved_segment,
0xff6d: self._parse_reserved_segment, 0xff6e: self._parse_reserved_segment,
0xff6e: self._parse_reserved_segment, 0xff6f: self._parse_reserved_segment,
0xff6f: self._parse_reserved_segment, 0xff79: self._parse_unrecognized_segment,
0xff79: self._parse_unrecognized_segment, 0xff90: self._parse_sot_segment,
0xff90: self._parse_sot_segment, 0xff91: self._parse_unrecognized_segment,
0xff91: self._parse_unrecognized_segment, 0xff92: self._parse_unrecognized_segment,
0xff92: self._parse_unrecognized_segment, 0xff93: self._parse_sod_segment,
0xff93: self._parse_sod_segment, 0xffd9: self._parse_eoc_segment}
0xffd9: self._parse_eoc_segment,
}
self.offset = fptr.tell() self.offset = fptr.tell()
self.length = length self.length = length
@ -150,9 +148,8 @@ class Codestream(object):
self.segment = [] self.segment = []
# First two bytes are the SOC marker # First two bytes are the SOC marker. We already know that.
read_buffer = fptr.read(2) read_buffer = fptr.read(2)
marker_id, = struct.unpack('>H', read_buffer)
segment = SOCsegment(offset=fptr.tell() - 2, length=0) segment = SOCsegment(offset=fptr.tell() - 2, length=0)
self.segment.append(segment) self.segment.append(segment)
@ -208,7 +205,6 @@ class Codestream(object):
fptr.seek(self._tile_offset[-1] + self._tile_length[-1]) fptr.seek(self._tile_offset[-1] + self._tile_length[-1])
def _parse_unrecognized_segment(self, fptr): def _parse_unrecognized_segment(self, fptr):
"""Looks like a valid marker, but not sure from reading the specs. """Looks like a valid marker, but not sure from reading the specs.
""" """
@ -225,40 +221,37 @@ class Codestream(object):
offset=self._offset, length=0) offset=self._offset, length=0)
else: else:
segment = self._parse_reserved_segment(fptr) segment = self._parse_reserved_segment(fptr)
return segment return segment
def _parse_reserved_marker(self, fptr): def _parse_reserved_marker(self, fptr):
"""Marker range between 0xff30 and 0xff39. """Marker range between 0xff30 and 0xff39.
""" """
the_id = '0x{0:x}'.format(self._marker_id) the_id = '0x{0:x}'.format(self._marker_id)
segment = Segment(marker_id=the_id, offset=self._offset, length=0) segment = Segment(marker_id=the_id, offset=self._offset, length=0)
return segment return segment
def _parse_reserved_segment(self, fptr): def _parse_reserved_segment(self, fptr):
"""Parse valid marker segment, segment description is unknown. """Parse valid marker segment, segment description is unknown.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
Segment instance. Segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(2) read_buffer = fptr.read(2)
length, = struct.unpack('>H', read_buffer) length, = struct.unpack('>H', read_buffer)
data = fptr.read(length-2) data = fptr.read(length-2)
segment = Segment(marker_id='0x{0:x}'.format(self._marker_id), segment = Segment(marker_id='0x{0:x}'.format(self._marker_id),
offset=offset, length=length, data=data) offset=offset, length=length, data=data)
return segment return segment
def _parse_tile_part_bit_stream(self, fptr, sod_marker, tile_length): def _parse_tile_part_bit_stream(self, fptr, sod_marker, tile_length):
"""Parse the tile part bit stream for SOP, EPH marker segments.""" """Parse the tile part bit stream for SOP, EPH marker segments."""
read_buffer = fptr.read(tile_length) read_buffer = fptr.read(tile_length)
@ -296,29 +289,29 @@ class Codestream(object):
msg += ''.join(strs) msg += ''.join(strs)
return msg return msg
# pylint: disable=R0201
def _parse_cme_segment(self, fptr): def _parse_cme_segment(self, fptr):
"""Parse the CME marker segment. """Parse the CME marker segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
CME segment instance. CME segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(4) read_buffer = fptr.read(4)
data = struct.unpack('>HH', read_buffer) data = struct.unpack('>HH', read_buffer)
length = data[0] length = data[0]
rcme = data[1] rcme = data[1]
ccme = fptr.read(length - 4) ccme = fptr.read(length - 4)
return CMEsegment(rcme, ccme, length, offset) return CMEsegment(rcme, ccme, length, offset)
def _parse_coc_segment(self, fptr): def _parse_coc_segment(self, fptr):
"""Parse the COC marker segment. """Parse the COC marker segment.
@ -357,25 +350,24 @@ class Codestream(object):
return COCsegment(ccoc, scoc, spcoc, length, offset) return COCsegment(ccoc, scoc, spcoc, length, offset)
def _parse_cod_segment(self, fptr): def _parse_cod_segment(self, fptr):
"""Parse the COD segment. """Parse the COD segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
COD segment instance. COD segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(3) read_buffer = fptr.read(3)
length, scod = struct.unpack('>HB', read_buffer) length, scod = struct.unpack('>HB', read_buffer)
numbytes = offset + 2 + length - fptr.tell() numbytes = offset + 2 + length - fptr.tell()
spcod = fptr.read(numbytes) spcod = fptr.read(numbytes)
spcod = np.frombuffer(spcod, dtype=np.uint8) spcod = np.frombuffer(spcod, dtype=np.uint8)
@ -388,77 +380,73 @@ class Codestream(object):
else: else:
self._parse_tpart_flag = False self._parse_tpart_flag = False
return CODsegment(scod, spcod, length, offset) return CODsegment(scod, spcod, length, offset)
def _parse_crg_segment(self, fptr): def _parse_crg_segment(self, fptr):
"""Parse the CRG marker segment. """Parse the CRG marker segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
CRG segment instance. CRG segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(2) read_buffer = fptr.read(2)
length, = struct.unpack('>H', read_buffer) length, = struct.unpack('>H', read_buffer)
read_buffer = fptr.read(4 * self._csiz) read_buffer = fptr.read(4 * self._csiz)
data = struct.unpack('>' + 'HH' * self._csiz, read_buffer) data = struct.unpack('>' + 'HH' * self._csiz, read_buffer)
xcrg = data[0::2] xcrg = data[0::2]
ycrg = data[1::2] ycrg = data[1::2]
return CRGsegment(xcrg, ycrg, length, offset)
return CRGsegment(xcrg, ycrg, length, offset)
def _parse_eoc_segment(self, fptr): def _parse_eoc_segment(self, fptr):
"""Parse the EOC (end-of-codestream) marker segment. """Parse the EOC (end-of-codestream) marker segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
EOC Segment instance. EOC Segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
length = 0 length = 0
return EOCsegment(length, offset) return EOCsegment(length, offset)
def _parse_plt_segment(self, fptr): def _parse_plt_segment(self, fptr):
"""Parse the PLT segment. """Parse the PLT segment.
The packet headers are not parsed, i.e. they remain "uninterpreted" The packet headers are not parsed, i.e. they remain "uninterpreted"
raw data beffers. raw data beffers.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
PLT segment instance. PLT segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(3) read_buffer = fptr.read(3)
length, zplt = struct.unpack('>HB', read_buffer) length, zplt = struct.unpack('>HB', read_buffer)
numbytes = length - 3 numbytes = length - 3
read_buffer = fptr.read(numbytes) read_buffer = fptr.read(numbytes)
iplt = np.frombuffer(read_buffer, dtype=np.uint8) iplt = np.frombuffer(read_buffer, dtype=np.uint8)
packet_len = [] packet_len = []
plen = 0 plen = 0
for byte in iplt: for byte in iplt:
@ -469,12 +457,11 @@ class Codestream(object):
else: else:
packet_len.append(plen) packet_len.append(plen)
plen = 0 plen = 0
iplt = packet_len iplt = packet_len
return PLTsegment(zplt, iplt, length, offset) return PLTsegment(zplt, iplt, length, offset)
def _parse_pod_segment(self, fptr): def _parse_pod_segment(self, fptr):
"""Parse the POD segment. """Parse the POD segment.
@ -507,54 +494,52 @@ class Codestream(object):
def _parse_ppm_segment(self, fptr): def _parse_ppm_segment(self, fptr):
"""Parse the PPM segment. """Parse the PPM segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
PPM segment instance. PPM segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(3) read_buffer = fptr.read(3)
length, zppm = struct.unpack('>HB', read_buffer) length, zppm = struct.unpack('>HB', read_buffer)
numbytes = length - 3 numbytes = length - 3
read_buffer = fptr.read(numbytes) read_buffer = fptr.read(numbytes)
return PPMsegment(zppm, read_buffer, length, offset) return PPMsegment(zppm, read_buffer, length, offset)
def _parse_ppt_segment(self, fptr): def _parse_ppt_segment(self, fptr):
"""Parse the PPT segment. """Parse the PPT segment.
The packet headers are not parsed, i.e. they remain "uninterpreted" The packet headers are not parsed, i.e. they remain "uninterpreted"
raw data beffers. raw data beffers.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
PPT segment instance. PPT segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(3) read_buffer = fptr.read(3)
length, zppt = struct.unpack('>HB', read_buffer) length, zppt = struct.unpack('>HB', read_buffer)
length = length length = length
zppt = zppt zppt = zppt
numbytes = length - 3 numbytes = length - 3
ippt = fptr.read(numbytes) ippt = fptr.read(numbytes)
return PPTsegment(zppt, ippt, length, offset)
return PPTsegment(zppt, ippt, length, offset)
def _parse_qcc_segment(self, fptr): def _parse_qcc_segment(self, fptr):
"""Parse the QCC segment. """Parse the QCC segment.
@ -594,22 +579,22 @@ class Codestream(object):
def _parse_qcd_segment(self, fptr): def _parse_qcd_segment(self, fptr):
"""Parse the QCD segment. """Parse the QCD segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
QCD Segment instance. QCD Segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(3) read_buffer = fptr.read(3)
length, sqcd = struct.unpack('>HB', read_buffer) length, sqcd = struct.unpack('>HB', read_buffer)
spqcd = fptr.read(length - 3) spqcd = fptr.read(length - 3)
return QCDsegment(sqcd, spqcd, length, offset) return QCDsegment(sqcd, spqcd, length, offset)
def _parse_rgn_segment(self, fptr): def _parse_rgn_segment(self, fptr):
@ -645,44 +630,43 @@ class Codestream(object):
def _parse_siz_segment(self, fptr): def _parse_siz_segment(self, fptr):
"""Parse the SIZ segment. """Parse the SIZ segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
SIZsegment instance. SIZsegment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(2) read_buffer = fptr.read(2)
length, = struct.unpack('>H', read_buffer) length, = struct.unpack('>H', read_buffer)
xy_buffer = fptr.read(36) xy_buffer = fptr.read(36)
num_components, = struct.unpack('>H', xy_buffer[-2:]) num_components, = struct.unpack('>H', xy_buffer[-2:])
component_buffer = fptr.read(num_components * 3) component_buffer = fptr.read(num_components * 3)
segment = SIZsegment(xy_buffer, component_buffer, length, offset) segment = SIZsegment(xy_buffer, component_buffer, length, offset)
# Need to keep track of the number of components from SIZ for # Need to keep track of the number of components from SIZ for
# other markers # other markers
self._csiz = len(segment.ssiz) self._csiz = len(segment.ssiz)
return segment return segment
def _parse_sod_segment(self, fptr): def _parse_sod_segment(self, fptr):
"""Parse the SOD (start-of-data) segment. """Parse the SOD (start-of-data) segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
SOD segment instance. SOD segment instance.
@ -692,30 +676,29 @@ class Codestream(object):
return SODsegment(length, offset) return SODsegment(length, offset)
def _parse_sot_segment(self, fptr): def _parse_sot_segment(self, fptr):
"""Parse the SOT segment. """Parse the SOT segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
SOT segment instance. SOT segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(10) read_buffer = fptr.read(10)
data = struct.unpack('>HHIBB', read_buffer) data = struct.unpack('>HHIBB', read_buffer)
length = data[0] length = data[0]
isot = data[1] isot = data[1]
psot = data[2] psot = data[2]
tpsot = data[3] tpsot = data[3]
tnsot = data[4] tnsot = data[4]
segment = SOTsegment(isot, psot, tpsot, tnsot, length, offset) segment = SOTsegment(isot, psot, tpsot, tnsot, length, offset)
# Need to keep easy access to tile offsets and lengths for when # Need to keep easy access to tile offsets and lengths for when
@ -730,36 +713,35 @@ class Codestream(object):
self._tile_length.append(tile_part_length) self._tile_length.append(tile_part_length)
return segment return segment
def _parse_tlm_segment(self, fptr): def _parse_tlm_segment(self, fptr):
"""Parse the TLM segment. """Parse the TLM segment.
Parameters Parameters
---------- ----------
fptr : file fptr : file
Open file object. Open file object.
Returns Returns
------- -------
TLM segment instance. TLM segment instance.
""" """
offset = fptr.tell() - 2 offset = fptr.tell() - 2
read_buffer = fptr.read(2) read_buffer = fptr.read(2)
length, = struct.unpack('>H', read_buffer) length, = struct.unpack('>H', read_buffer)
read_buffer = fptr.read(2) read_buffer = fptr.read(2)
ztlm, stlm = struct.unpack('>BB', read_buffer) ztlm, stlm = struct.unpack('>BB', read_buffer)
ttlm_st = (stlm >> 4) & 0x3 ttlm_st = (stlm >> 4) & 0x3
ptlm_sp = (stlm >> 6) & 0x1 ptlm_sp = (stlm >> 6) & 0x1
nbytes = length - 4 nbytes = length - 4
if ttlm_st == 0: if ttlm_st == 0:
ntiles = nbytes / ((ptlm_sp + 1) * 2) ntiles = nbytes / ((ptlm_sp + 1) * 2)
else: else:
ntiles = nbytes / (ttlm_st + (ptlm_sp + 1) * 2) ntiles = nbytes / (ttlm_st + (ptlm_sp + 1) * 2)
read_buffer = fptr.read(nbytes) read_buffer = fptr.read(nbytes)
if ttlm_st == 0: if ttlm_st == 0:
ttlm = None ttlm = None
@ -768,12 +750,12 @@ class Codestream(object):
fmt = 'B' fmt = 'B'
elif ttlm_st == 2: elif ttlm_st == 2:
fmt = 'H' fmt = 'H'
if ptlm_sp == 0: if ptlm_sp == 0:
fmt += 'H' fmt += 'H'
else: else:
fmt += 'I' fmt += 'I'
data = struct.unpack('>' + fmt * int(ntiles), read_buffer) data = struct.unpack('>' + fmt * int(ntiles), read_buffer)
if ttlm_st == 0: if ttlm_st == 0:
ttlm = None ttlm = None
@ -781,9 +763,8 @@ class Codestream(object):
else: else:
ttlm = data[0::2] ttlm = data[0::2]
ptlm = data[1::2] ptlm = data[1::2]
return TLMsegment(length, offset, ztlm, ttlm, ptlm) return TLMsegment(length, offset, ztlm, ttlm, ptlm)
class Segment(object): class Segment(object):