Added palette and xml box repr support. #133
This commit is contained in:
parent
c8fe9ed776
commit
dc994377e1
2 changed files with 47 additions and 2 deletions
|
|
@ -75,6 +75,12 @@ class Jp2kBox(object):
|
||||||
self.offset = offset
|
self.offset = offset
|
||||||
self.longname = longname
|
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):
|
def __str__(self):
|
||||||
msg = "{0} Box ({1})".format(self.longname, self.box_id)
|
msg = "{0} Box ({1})".format(self.longname, self.box_id)
|
||||||
msg += " @ ({0}, {1})".format(self.offset, self.length)
|
msg += " @ ({0}, {1})".format(self.offset, self.length)
|
||||||
|
|
@ -1273,6 +1279,12 @@ class PaletteBox(Jp2kBox):
|
||||||
self.length = length
|
self.length = length
|
||||||
self.offset = offset
|
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):
|
def __str__(self):
|
||||||
msg = Jp2kBox.__str__(self)
|
msg = Jp2kBox.__str__(self)
|
||||||
msg += '\n Size: ({0} x {1})'.format(len(self.palette[0]),
|
msg += '\n Size: ({0} x {1})'.format(len(self.palette[0]),
|
||||||
|
|
@ -1895,6 +1907,9 @@ class XMLBox(Jp2kBox):
|
||||||
self.length = length
|
self.length = length
|
||||||
self.offset = offset
|
self.offset = offset
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "glymur.jp2box.XMLBox(xml={0})".format(self.xml)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
msg = Jp2kBox.__str__(self)
|
msg = Jp2kBox.__str__(self)
|
||||||
xml = self.xml
|
xml = self.xml
|
||||||
|
|
@ -1953,7 +1968,6 @@ class XMLBox(Jp2kBox):
|
||||||
msg = msg.format(offset, ude.reason)
|
msg = msg.format(offset, ude.reason)
|
||||||
warnings.warn(msg, UserWarning)
|
warnings.warn(msg, UserWarning)
|
||||||
|
|
||||||
|
|
||||||
# Strip out any trailing nulls, as they can foul up XML parsing.
|
# Strip out any trailing nulls, as they can foul up XML parsing.
|
||||||
text = text.rstrip(chr(0))
|
text = text.rstrip(chr(0))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ Test suite specifically targeting JP2 box layout.
|
||||||
|
|
||||||
import doctest
|
import doctest
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import struct
|
import struct
|
||||||
import sys
|
import sys
|
||||||
|
|
@ -414,7 +415,7 @@ class TestAppend(unittest.TestCase):
|
||||||
|
|
||||||
jp2 = Jp2k(tfile.name)
|
jp2 = Jp2k(tfile.name)
|
||||||
the_xml = ET.fromstring('<?xml version="1.0"?><data>0</data>')
|
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)
|
jp2.append(xmlbox)
|
||||||
|
|
||||||
# The sequence of box IDs should be the same as before, but with an
|
# 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[0], uuid1)
|
||||||
self.assertEqual(newbox.ulst[1], uuid2)
|
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):
|
class TestJpxBoxes(unittest.TestCase):
|
||||||
"""Tests for JPX boxes."""
|
"""Tests for JPX boxes."""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue