Skip to content

Commit 08152f9

Browse files
author
Steve Canny
committed
shr: add ElementProxy.part
1 parent 576c047 commit 08152f9

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

docx/shared.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,11 @@ class ElementProxy(object):
172172
type of class in python-docx other than custom element (oxml) classes.
173173
"""
174174

175-
__slots__ = ('_element',)
175+
__slots__ = ('_element', '_parent')
176176

177-
def __init__(self, element):
177+
def __init__(self, element, parent=None):
178178
self._element = element
179+
self._parent = parent
179180

180181
def __eq__(self, other):
181182
"""
@@ -201,6 +202,13 @@ def element(self):
201202
"""
202203
return self._element
203204

205+
@property
206+
def part(self):
207+
"""
208+
The package part containing this object
209+
"""
210+
return self._parent.part
211+
204212

205213
class Parented(object):
206214
"""

tests/test_shared.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@
1010

1111
import pytest
1212

13+
from docx.opc.part import XmlPart
1314
from docx.shared import ElementProxy
1415

1516
from .unitutil.cxml import element
17+
from .unitutil.mock import instance_mock
1618

1719

1820
class DescribeElementProxy(object):
@@ -32,6 +34,10 @@ def it_knows_its_element(self, element_fixture):
3234
proxy, element = element_fixture
3335
assert proxy.element is element
3436

37+
def it_knows_its_part(self, part_fixture):
38+
proxy, part_ = part_fixture
39+
assert proxy.part is part_
40+
3541
# fixture --------------------------------------------------------
3642

3743
@pytest.fixture
@@ -48,3 +54,19 @@ def eq_fixture(self):
4854
proxy_3 = ElementProxy(q)
4955
not_a_proxy = 'Foobar'
5056
return proxy, proxy_2, proxy_3, not_a_proxy
57+
58+
@pytest.fixture
59+
def part_fixture(self, other_proxy_, part_):
60+
other_proxy_.part = part_
61+
proxy = ElementProxy(None, other_proxy_)
62+
return proxy, part_
63+
64+
# fixture components ---------------------------------------------
65+
66+
@pytest.fixture
67+
def other_proxy_(self, request):
68+
return instance_mock(request, ElementProxy)
69+
70+
@pytest.fixture
71+
def part_(self, request):
72+
return instance_mock(request, XmlPart)

0 commit comments

Comments
 (0)