Skip to content

Commit d0cf414

Browse files
author
Steve Canny
committed
add PackageReader.iter_srels()
1 parent 11f869e commit d0cf414

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

opc/pkgreader.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class PackageReader(object):
2525
"""
2626
def __init__(self, content_types, pkg_srels, sparts):
2727
super(PackageReader, self).__init__()
28+
self._pkg_srels = pkg_srels
2829
self._sparts = sparts
2930

3031
@staticmethod
@@ -48,6 +49,17 @@ def iter_sparts(self):
4849
for spart in self._sparts:
4950
yield (spart.partname, spart.content_type, spart.blob)
5051

52+
def iter_srels(self):
53+
"""
54+
Generate a 2-tuple `(source_uri, srel)` for each of the relationships
55+
in the package.
56+
"""
57+
for srel in self._pkg_srels:
58+
yield (PACKAGE_URI, srel)
59+
for spart in self._sparts:
60+
for srel in spart.srels:
61+
yield (spart.partname, srel)
62+
5163
@staticmethod
5264
def _load_serialized_parts(phys_reader, pkg_srels, content_types):
5365
"""

tests/test_pkgreader.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,27 @@ def it_can_iterate_over_the_serialized_parts(self):
103103
assert retval == (partname, content_type, blob)
104104
assert iter_count == 1
105105

106+
def it_can_iterate_over_all_the_srels(self):
107+
# mockery ----------------------
108+
pkg_srels = ['srel1', 'srel2']
109+
sparts = [
110+
Mock(name='spart1', partname='pn1', srels=['srel3', 'srel4']),
111+
Mock(name='spart2', partname='pn2', srels=['srel5', 'srel6']),
112+
]
113+
pkg_reader = PackageReader(None, pkg_srels, sparts)
114+
# exercise ---------------------
115+
generated_tuples = [t for t in pkg_reader.iter_srels()]
116+
# verify -----------------------
117+
expected_tuples = [
118+
('/', 'srel1'),
119+
('/', 'srel2'),
120+
('pn1', 'srel3'),
121+
('pn1', 'srel4'),
122+
('pn2', 'srel5'),
123+
('pn2', 'srel6'),
124+
]
125+
assert generated_tuples == expected_tuples
126+
106127
def it_can_load_serialized_parts(self, _SerializedPart_, _walk_phys_parts):
107128
# test data --------------------
108129
test_data = (

0 commit comments

Comments
 (0)