Skip to content

Commit d6a46fc

Browse files
author
Steve Canny
committed
style: add StylesPart.styles
1 parent 677694b commit d6a46fc

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

docx/parts/styles.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from ..opc.package import Part
1212
from ..oxml.shared import oxml_fromstring
13+
from ..shared import lazyproperty
1314

1415

1516
class StylesPart(Part):
@@ -39,3 +40,21 @@ def new(cls):
3940
``<w:styles>`` element.
4041
"""
4142
raise NotImplementedError
43+
44+
@lazyproperty
45+
def styles(self):
46+
"""
47+
The |_Styles| instance containing the styles (<w:style> element
48+
proxies) for this styles part.
49+
"""
50+
return _Styles(self._element)
51+
52+
53+
class _Styles(object):
54+
"""
55+
Collection of |_Style| instances corresponding to the ``<w:style>``
56+
elements in a styles part.
57+
"""
58+
def __init__(self, styles_elm):
59+
super(_Styles, self).__init__()
60+
self._styles_elm = styles_elm

tests/parts/test_styles.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
from docx.opc.packuri import PackURI
1414
from docx.oxml.parts.styles import CT_Styles
1515
from docx.package import Package
16-
from docx.parts.styles import StylesPart
16+
from docx.parts.styles import StylesPart, _Styles
1717

1818
from ..unitutil import (
19-
function_mock, initializer_mock, instance_mock, method_mock
19+
function_mock, class_mock, initializer_mock, instance_mock, method_mock
2020
)
2121

2222

@@ -51,6 +51,12 @@ def it_can_be_constructed_by_opc_part_factory(self, construct_fixture):
5151
)
5252
assert isinstance(styles_part, StylesPart)
5353

54+
def it_provides_access_to_the_styles(self, styles_fixture):
55+
styles_part, _Styles_, styles_elm_, styles_ = styles_fixture
56+
styles = styles_part.styles
57+
_Styles_.assert_called_once_with(styles_elm_)
58+
assert styles is styles_
59+
5460
# fixtures -------------------------------------------------------
5561

5662
@pytest.fixture
@@ -98,10 +104,25 @@ def package_(self, request):
98104
def partname_(self, request):
99105
return instance_mock(request, PackURI)
100106

107+
@pytest.fixture
108+
def _Styles_(self, request, styles_):
109+
return class_mock(
110+
request, 'docx.parts.styles._Styles', return_value=styles_
111+
)
112+
113+
@pytest.fixture
114+
def styles_(self, request):
115+
return instance_mock(request, _Styles)
116+
101117
@pytest.fixture
102118
def styles_elm_(self, request):
103119
return instance_mock(request, CT_Styles)
104120

121+
@pytest.fixture
122+
def styles_fixture(self, _Styles_, styles_elm_, styles_):
123+
styles_part = StylesPart(None, None, styles_elm_, None)
124+
return styles_part, _Styles_, styles_elm_, styles_
125+
105126
@pytest.fixture
106127
def styles_part_(self, request):
107128
return instance_mock(request, StylesPart)

0 commit comments

Comments
 (0)