Skip to content

Commit 042c313

Browse files
author
Steve Canny
committed
add PackURI.relative_ref
1 parent 425ce84 commit 042c313

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

opc/packuri.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,20 @@ def membername(self):
7272
"""
7373
return self[1:]
7474

75+
def relative_ref(self, baseURI):
76+
"""
77+
Return string containing relative reference to package item from
78+
*baseURI*. E.g. PackURI('/ppt/slideLayouts/slideLayout1.xml') would
79+
return '../slideLayouts/slideLayout1.xml' for baseURI '/ppt/slides'.
80+
"""
81+
# workaround for posixpath bug in 2.6, doesn't generate correct
82+
# relative path when *start* (second) parameter is root ('/')
83+
if baseURI == '/':
84+
relpath = self[1:]
85+
else:
86+
relpath = posixpath.relpath(self, baseURI)
87+
return relpath
88+
7589
@property
7690
def rels_uri(self):
7791
"""

tests/test_packuri.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,18 @@ def it_can_calculate_membername(self):
6666
for pack_uri, expected_membername in self.cases(expected_values):
6767
assert pack_uri.membername == expected_membername
6868

69+
def it_can_calculate_relative_ref_value(self):
70+
cases = (
71+
('/', '/ppt/presentation.xml', 'ppt/presentation.xml'),
72+
('/ppt', '/ppt/slideMasters/slideMaster1.xml',
73+
'slideMasters/slideMaster1.xml'),
74+
('/ppt/slides', '/ppt/slideLayouts/slideLayout1.xml',
75+
'../slideLayouts/slideLayout1.xml'),
76+
)
77+
for baseURI, uri_str, expected_relative_ref in cases:
78+
pack_uri = PackURI(uri_str)
79+
assert pack_uri.relative_ref(baseURI) == expected_relative_ref
80+
6981
def it_can_calculate_rels_uri(self):
7082
expected_values = (
7183
'/_rels/.rels',

0 commit comments

Comments
 (0)