Added palette and xml box repr support. #133

This commit is contained in:
jevans 2013-10-26 21:43:32 -04:00
commit dc994377e1
2 changed files with 47 additions and 2 deletions

View file

@ -75,6 +75,12 @@ class Jp2kBox(object):
self.offset = offset
self.longname = longname
def __repr__(self):
msg = "glymur.jp2box.Jp2kBox(box_id='{0}', offset={1}, length={2}, "
msg += "longname='{3}')"
msg = msg.format(self.box_id, self.offset, self.length, self.longname)
return msg
def __str__(self):
msg = "{0} Box ({1})".format(self.longname, self.box_id)
msg += " @ ({0}, {1})".format(self.offset, self.length)
@ -1273,6 +1279,12 @@ class PaletteBox(Jp2kBox):
self.length = length
self.offset = offset
def __repr__(self):
msg = "glymur.jp2box.PaletteBox({0}, bits_per_component={1}, "
msg += "signed={2})"
msg = msg.format(self.palette, self.bits_per_component, self.signed)
return msg
def __str__(self):
msg = Jp2kBox.__str__(self)
msg += '\n Size: ({0} x {1})'.format(len(self.palette[0]),
@ -1895,6 +1907,9 @@ class XMLBox(Jp2kBox):
self.length = length
self.offset = offset
def __repr__(self):
return "glymur.jp2box.XMLBox(xml={0})".format(self.xml)
def __str__(self):
msg = Jp2kBox.__str__(self)
xml = self.xml
@ -1953,7 +1968,6 @@ class XMLBox(Jp2kBox):
msg = msg.format(offset, ude.reason)
warnings.warn(msg, UserWarning)
# Strip out any trailing nulls, as they can foul up XML parsing.
text = text.rstrip(chr(0))

View file

@ -18,6 +18,7 @@ Test suite specifically targeting JP2 box layout.
import doctest
import os
import re
import shutil
import struct
import sys
@ -414,7 +415,7 @@ class TestAppend(unittest.TestCase):
jp2 = Jp2k(tfile.name)
the_xml = ET.fromstring('<?xml version="1.0"?><data>0</data>')
xmlbox = glymur.jp2box.XMLBox(xml=the_xml)
xmlbox = glymur.jp2box.XMLBox(xml=ET.ElementTree(the_xml))
jp2.append(xmlbox)
# The sequence of box IDs should be the same as before, but with an
@ -865,6 +866,36 @@ class TestRepr(unittest.TestCase):
self.assertEqual(newbox.ulst[0], uuid1)
self.assertEqual(newbox.ulst[1], uuid2)
def test_jp2k_box(self):
"""Verify Superclass repr."""
box = glymur.jp2box.Jp2kBox(box_id='one', offset=2, length=3,
longname='four')
newbox = eval(repr(box))
self.assertEqual(newbox.box_id, 'one')
self.assertEqual(newbox.offset, 2)
self.assertEqual(newbox.length, 3)
self.assertEqual(newbox.longname, 'four')
def test_palette_box(self):
"""Verify Palette box repr."""
palette = np.array([[255, 0, 1000], [0, 255, 0]], dtype=np.int32)
bps = (8, 8, 16)
signed = (True, False, True)
box = glymur.jp2box.PaletteBox(palette=palette, bits_per_component=bps,
signed=(True, False, True))
# The palette can't be reinstantiated thru eval/repr.
s = repr(box)
self.assertTrue(True)
def test_xml_box(self):
"""Verify xml box repr."""
elt = ET.fromstring('<?xml version="1.0"?><data>0</data>')
tree = ET.ElementTree(elt)
box = glymur.jp2box.XMLBox(xml=tree)
regexp = "glymur.jp2box.XMLBox\(xml=<ElementTree object "
regexp += "at 0x([a-f0-9]*)>\)"
self.assertRegexpMatches(repr(box), regexp)
class TestJpxBoxes(unittest.TestCase):
"""Tests for JPX boxes."""