Skip to content

Commit a41f9ec

Browse files
author
Steve Canny
committed
img: add _ShortIfdEntry._parse_value()
1 parent 80c395d commit a41f9ec

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

docx/image/tiff.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,16 @@ class _ShortIfdEntry(_IfdEntry):
278278
"""
279279
IFD entry expressed as a short (2-byte) integer
280280
"""
281+
@classmethod
282+
def _parse_value(cls, stream_rdr, offset, value_count, value_offset):
283+
"""
284+
Return the short int value contained in the *value_offset* field of
285+
this entry. Only supports single values at present.
286+
"""
287+
if value_count == 1:
288+
return stream_rdr.read_short(offset, 8)
289+
else:
290+
return 'Multi-value short integer NOT IMPLEMENTED'
281291

282292

283293
class _LongIfdEntry(_IfdEntry):

tests/image/test_tiff.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
from docx.image.constants import MIME_TYPE, TIFF_TAG
1515
from docx.image.helpers import BIG_ENDIAN, LITTLE_ENDIAN, StreamReader
1616
from docx.image.tiff import (
17-
_IfdEntries, _IfdEntry, _IfdEntryFactory, _IfdParser, Tiff, _TiffParser
17+
_IfdEntries, _IfdEntry, _IfdEntryFactory, _IfdParser, _ShortIfdEntry,
18+
Tiff, _TiffParser
1819
)
1920

2021
from ..unitutil import (
@@ -414,3 +415,12 @@ def _parse_value_(self, request, value_):
414415
@pytest.fixture
415416
def value_(self, request):
416417
return loose_mock(request)
418+
419+
420+
class Describe_ShortIfdEntry(object):
421+
422+
def it_can_parse_a_short_int_IFD_entry(self):
423+
bytes_ = b'foobaroo\x00\x2A'
424+
stream_rdr = StreamReader(BytesIO(bytes_), BIG_ENDIAN)
425+
val = _ShortIfdEntry._parse_value(stream_rdr, 0, 1, None)
426+
assert val == 42

0 commit comments

Comments
 (0)