From 1fe62a9d9e366a333f94d4ec7511cdc7dbddaf19 Mon Sep 17 00:00:00 2001 From: John Evans Date: Sun, 11 Aug 2013 07:34:40 -0400 Subject: [PATCH] pylint work, #99 --- glymur/codestream.py | 11 +++-- glymur/test/test_codestream.py | 78 +++++++++++++++++++--------------- 2 files changed, 50 insertions(+), 39 deletions(-) diff --git a/glymur/codestream.py b/glymur/codestream.py index 7bd0215..bb3caf6 100644 --- a/glymur/codestream.py +++ b/glymur/codestream.py @@ -775,12 +775,15 @@ class Segment(object): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. + data : bytes iterable or None + Uninterpreted buffer of raw bytes, only used where a segment is not + well understood. """ def __init__(self, marker_id='', offset=-1, length=-1, data=None): self.marker_id = marker_id self.offset = offset self.length = length - self._data = data + self.data = data def __str__(self): msg = '{0} marker segment @ ({1}, {2})'.format(self.marker_id, @@ -1203,8 +1206,8 @@ class PPMsegment(Segment): Segment.__init__(self, marker_id='PPM') self.zppm = zppm - # both Nppm and Ippms information stored in _data - self._data = data + # both Nppm and Ippms information stored in data + self.data = data self.length = length self.offset = offset @@ -1213,7 +1216,7 @@ class PPMsegment(Segment): msg = Segment.__str__(self) msg += '\n Index: {0}' msg += '\n Data: {1} uninterpreted bytes' - msg = msg.format(self.zppm, len(self._data)) + msg = msg.format(self.zppm, len(self.data)) return msg diff --git a/glymur/test/test_codestream.py b/glymur/test/test_codestream.py index f0d3e8a..3913d44 100644 --- a/glymur/test/test_codestream.py +++ b/glymur/test/test_codestream.py @@ -1,4 +1,13 @@ -#pylint: disable-all +""" +Test suite for codestream parsing. +""" + +# unittest doesn't work well with R0904. +# pylint: disable=R0904 + +# tempfile.TemporaryDirectory, unittest.assertWarns introduced in 3.2 +# pylint: disable=E1101 + import os import struct import sys @@ -9,23 +18,21 @@ if sys.hexversion < 0x02070000: else: import unittest -import numpy as np -import pkg_resources - from glymur import Jp2k import glymur try: - data_root = os.environ['OPJ_DATA_ROOT'] + DATA_ROOT = os.environ['OPJ_DATA_ROOT'] except KeyError: - data_root = None + DATA_ROOT = None except: raise -@unittest.skipIf(data_root is None, +@unittest.skipIf(DATA_ROOT is None, "OPJ_DATA_ROOT environment variable not set") class TestCodestream(unittest.TestCase): + """Test suite for unusual codestream cases.""" def setUp(self): self.jp2file = glymur.data.nemo() @@ -35,75 +42,76 @@ class TestCodestream(unittest.TestCase): @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_reserved_marker_segment(self): + """Reserved marker segments are ok.""" + # Some marker segments were reserved in FCD15444-1. Since that # standard is old, some of them may have come into use. # # Let's inject a reserved marker segment into a file that # we know something about to make sure we can still parse it. - filename = os.path.join(data_root, 'input/conformance/p0_01.j2k') + filename = os.path.join(DATA_ROOT, 'input/conformance/p0_01.j2k') with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile: with open(filename, 'rb') as ifile: # Everything up until the first QCD marker. - buffer = ifile.read(45) - tfile.write(buffer) + read_buffer = ifile.read(45) + tfile.write(read_buffer) # Write the new marker segment, 0xff6f = 65391 - buffer = struct.pack('>HHB', int(65391), int(3), int(0)) - tfile.write(buffer) + read_buffer = struct.pack('>HHB', int(65391), int(3), int(0)) + tfile.write(read_buffer) # Get the rest of the input file. - buffer = ifile.read() - tfile.write(buffer) + read_buffer = ifile.read() + tfile.write(read_buffer) tfile.flush() - j = Jp2k(tfile.name) - c = j.get_codestream() + codestream = Jp2k(tfile.name).get_codestream() - self.assertEqual(c.segment[2].marker_id, '0xff6f') - self.assertEqual(c.segment[2].length, 3) - self.assertEqual(c.segment[2]._data, b'\x00') + self.assertEqual(codestream.segment[2].marker_id, '0xff6f') + self.assertEqual(codestream.segment[2].length, 3) + self.assertEqual(codestream.segment[2].data, b'\x00') @unittest.skipIf(sys.hexversion < 0x03020000, "Uses features introduced in 3.2.") @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_unknown_marker_segment(self): + """Should warn for an unknown marker.""" # Let's inject a marker segment whose marker does not appear to # be valid. We still parse the file, but warn about the offending # marker. - filename = os.path.join(data_root, 'input/conformance/p0_01.j2k') + filename = os.path.join(DATA_ROOT, 'input/conformance/p0_01.j2k') with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile: with open(filename, 'rb') as ifile: # Everything up until the first QCD marker. - buffer = ifile.read(45) - tfile.write(buffer) + read_buffer = ifile.read(45) + tfile.write(read_buffer) # Write the new marker segment, 0xff79 = 65401 - buffer = struct.pack('>HHB', int(65401), int(3), int(0)) - tfile.write(buffer) + read_buffer = struct.pack('>HHB', int(65401), int(3), int(0)) + tfile.write(read_buffer) # Get the rest of the input file. - buffer = ifile.read() - tfile.write(buffer) + read_buffer = ifile.read() + tfile.write(read_buffer) tfile.flush() with self.assertWarns(UserWarning): - j = Jp2k(tfile.name) - c = j.get_codestream() + codestream = Jp2k(tfile.name).get_codestream() - self.assertEqual(c.segment[2].marker_id, '0xff79') - self.assertEqual(c.segment[2].length, 3) - self.assertEqual(c.segment[2]._data, b'\x00') + self.assertEqual(codestream.segment[2].marker_id, '0xff79') + self.assertEqual(codestream.segment[2].length, 3) + self.assertEqual(codestream.segment[2].data, b'\x00') def test_psot_is_zero(self): - # Psot=0 in SOT is perfectly legal. Issue #78. - filename = os.path.join(data_root, + """Psot=0 in SOT is perfectly legal. Issue #78.""" + filename = os.path.join(DATA_ROOT, 'input/nonregression/123.j2c') j = Jp2k(filename) - c = j.get_codestream(header_only=False) + codestream = j.get_codestream(header_only=False) # The codestream is valid, so we should be able to get the entire # codestream, so the last one is EOC. - self.assertEqual(c.segment[-1].marker_id, 'EOC') + self.assertEqual(codestream.segment[-1].marker_id, 'EOC') if __name__ == "__main__": unittest.main()