Skip to content

Commit 6bb2b38

Browse files
author
Steve Canny
committed
add PackageReader.iter_sparts()
1 parent 492b5c0 commit 6bb2b38

2 files changed

Lines changed: 24 additions & 0 deletions

File tree

opc/pkgreader.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class PackageReader(object):
2323
"""
2424
def __init__(self, content_types, pkg_srels, sparts):
2525
super(PackageReader, self).__init__()
26+
self._sparts = sparts
2627

2728
@staticmethod
2829
def from_file(pkg_file):
@@ -37,6 +38,14 @@ def from_file(pkg_file):
3738
phys_reader.close()
3839
return PackageReader(content_types, pkg_srels, sparts)
3940

41+
def iter_sparts(self):
42+
"""
43+
Generate a 3-tuple `(partname, content_type, blob)` for each of the
44+
serialized parts in the package.
45+
"""
46+
for spart in self._sparts:
47+
yield (spart.partname, spart.content_type, spart.blob)
48+
4049
@staticmethod
4150
def _load_serialized_parts(phys_reader, pkg_srels, content_types):
4251
"""

tests/test_pkgreader.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,18 @@ def it_can_construct_from_pkg_file(self, init, PhysPkgReader_, from_xml,
6262
phys_reader.close.assert_called_once_with()
6363
init.assert_called_once_with(content_types, pkg_srels, sparts)
6464
assert isinstance(pkg_reader, PackageReader)
65+
66+
def it_can_iterate_over_the_serialized_parts(self):
67+
# mockery ----------------------
68+
partname, content_type, blob = ('part/name.xml', 'app/vnd.type',
69+
'<Part_1/>')
70+
spart = Mock(name='spart', partname=partname,
71+
content_type=content_type, blob=blob)
72+
pkg_reader = PackageReader(None, None, [spart])
73+
iter_count = 0
74+
# exercise ---------------------
75+
for retval in pkg_reader.iter_sparts():
76+
iter_count += 1
77+
# verify -----------------------
78+
assert retval == (partname, content_type, blob)
79+
assert iter_count == 1

0 commit comments

Comments
 (0)