Skip to content

Commit 0340c71

Browse files
author
Steve Canny
committed
num: add NumberingPart.numbering_definitions
1 parent e84b60c commit 0340c71

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

docx/parts/numbering.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 NumberingPart(Part):
@@ -39,3 +40,21 @@ def new(cls):
3940
``<w:numbering>`` element.
4041
"""
4142
raise NotImplementedError
43+
44+
@lazyproperty
45+
def numbering_definitions(self):
46+
"""
47+
The |_NumberingDefinitions| instance containing the numbering
48+
definitions (<w:num> element proxies) for this numbering part.
49+
"""
50+
return _NumberingDefinitions(self._element)
51+
52+
53+
class _NumberingDefinitions(object):
54+
"""
55+
Collection of |_NumberingDefinition| instances corresponding to the
56+
``<w:num>`` elements in a numbering part.
57+
"""
58+
def __init__(self, numbering_elm):
59+
super(_NumberingDefinitions, self).__init__()
60+
self._numbering = numbering_elm

tests/parts/test_numbering.py

Lines changed: 31 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.numbering import CT_Numbering
1515
from docx.package import Package
16-
from docx.parts.numbering import NumberingPart
16+
from docx.parts.numbering import NumberingPart, _NumberingDefinitions
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,14 @@ def it_can_be_constructed_by_opc_part_factory(self, construct_fixture):
5151
)
5252
assert isinstance(numbering_part, NumberingPart)
5353

54+
def it_provides_access_to_the_numbering_definitions(
55+
self, num_defs_fixture):
56+
(numbering_part, _NumberingDefinitions_, numbering_elm_,
57+
numbering_definitions_) = num_defs_fixture
58+
numbering_definitions = numbering_part.numbering_definitions
59+
_NumberingDefinitions_.assert_called_once_with(numbering_elm_)
60+
assert numbering_definitions is numbering_definitions_
61+
5462
# fixtures -------------------------------------------------------
5563

5664
@pytest.fixture
@@ -83,6 +91,27 @@ def load_fixture(
8391
numbering_part_load_, partname_, blob_, package_, numbering_part_
8492
)
8593

94+
@pytest.fixture
95+
def _NumberingDefinitions_(self, request, numbering_definitions_):
96+
return class_mock(
97+
request, 'docx.parts.numbering._NumberingDefinitions',
98+
return_value=numbering_definitions_
99+
)
100+
101+
@pytest.fixture
102+
def num_defs_fixture(
103+
self, _NumberingDefinitions_, numbering_elm_,
104+
numbering_definitions_):
105+
numbering_part = NumberingPart(None, None, numbering_elm_, None)
106+
return (
107+
numbering_part, _NumberingDefinitions_, numbering_elm_,
108+
numbering_definitions_
109+
)
110+
111+
@pytest.fixture
112+
def numbering_definitions_(self, request):
113+
return instance_mock(request, _NumberingDefinitions)
114+
86115
@pytest.fixture
87116
def numbering_elm_(self, request):
88117
return instance_mock(request, CT_Numbering)

0 commit comments

Comments
 (0)