Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d631756

Browse files
Benjamin Toornstrascanny
authored andcommitted
parts: add EndnotesPart
1 parent 45b5fd1 commit d631756

File tree

6 files changed

+76
-0
lines changed

6 files changed

+76
-0
lines changed

docs/conf.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@
105105
106106
.. |Emu| replace:: :class:`.Emu`
107107
108+
.. |EndnotesPart| replace:: :class:`.EndnotesPart`
109+
108110
.. |False| replace:: :class:`False`
109111
110112
.. |float| replace:: :class:`.float`

docx/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from docx.opc.parts.coreprops import CorePropertiesPart
1313

1414
from docx.parts.document import DocumentPart
15+
from docx.parts.endnotes import EndnotesPart
1516
from docx.parts.hdrftr import FooterPart, HeaderPart
1617
from docx.parts.image import ImagePart
1718
from docx.parts.numbering import NumberingPart
@@ -28,6 +29,7 @@ def part_class_selector(content_type, reltype):
2829
PartFactory.part_class_selector = part_class_selector
2930
PartFactory.part_type_for[CT.OPC_CORE_PROPERTIES] = CorePropertiesPart
3031
PartFactory.part_type_for[CT.WML_DOCUMENT_MAIN] = DocumentPart
32+
PartFactory.part_type_for[CT.WML_ENDNOTES] = EndnotesPart
3133
PartFactory.part_type_for[CT.WML_FOOTER] = FooterPart
3234
PartFactory.part_type_for[CT.WML_HEADER] = HeaderPart
3335
PartFactory.part_type_for[CT.WML_NUMBERING] = NumberingPart
@@ -38,6 +40,7 @@ def part_class_selector(content_type, reltype):
3840
CT,
3941
CorePropertiesPart,
4042
DocumentPart,
43+
EndnotesPart,
4144
FooterPart,
4245
HeaderPart,
4346
NumberingPart,

docx/oxml/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ def OxmlElement(nsptag_str, attrs=None, nsdecls=None):
8181
register_element_cls("w:body", CT_Body)
8282
register_element_cls("w:document", CT_Document)
8383

84+
from docx.oxml.endnotes import CT_Endnotes # noqa
85+
register_element_cls('w:endnotes', CT_Endnotes)
86+
8487
from docx.oxml.numbering import CT_Num, CT_Numbering, CT_NumLvl, CT_NumPr # noqa
8588

8689
register_element_cls("w:abstractNumId", CT_DecimalNumber)

docx/oxml/endnotes.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# encoding: utf-8
2+
3+
"""Custom element classes related to end-notes"""
4+
5+
from __future__ import absolute_import, division, print_function, unicode_literals
6+
7+
from docx.oxml.xmlchemy import BaseOxmlElement
8+
9+
10+
class CT_Endnotes(BaseOxmlElement):
11+
"""`w:endnotes` element"""

docx/parts/endnotes.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# encoding: utf-8
2+
3+
"""|EndnotesPart| and closely related objects"""
4+
5+
from __future__ import absolute_import, division, print_function, unicode_literals
6+
7+
from docx.opc.part import XmlPart
8+
9+
10+
class EndnotesPart(XmlPart):
11+
"""Package part containing end-notes"""

tests/parts/test_endnotes.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# encoding: utf-8
2+
3+
"""Unit test suite for the docx.parts.endnotes module"""
4+
5+
from __future__ import absolute_import, division, print_function, unicode_literals
6+
7+
import pytest
8+
9+
from docx.opc.constants import CONTENT_TYPE as CT, RELATIONSHIP_TYPE as RT
10+
from docx.opc.part import PartFactory
11+
from docx.package import Package
12+
from docx.parts.endnotes import EndnotesPart
13+
14+
from ..unitutil.mock import instance_mock, method_mock
15+
16+
17+
class DescribeEndnotesPart(object):
18+
def it_is_used_by_loader_to_construct_endnotes_part(
19+
self, package_, EndnotesPart_load_, endnotes_part_
20+
):
21+
partname = "endnotes.xml"
22+
content_type = CT.WML_ENDNOTES
23+
reltype = RT.ENDNOTES
24+
blob = "<w:endnotes/>"
25+
EndnotesPart_load_.return_value = endnotes_part_
26+
27+
part = PartFactory(partname, content_type, reltype, blob, package_)
28+
29+
EndnotesPart_load_.assert_called_once_with(
30+
partname, content_type, blob, package_
31+
)
32+
assert part is endnotes_part_
33+
34+
# fixture components ---------------------------------------------
35+
36+
@pytest.fixture
37+
def EndnotesPart_load_(self, request):
38+
return method_mock(request, EndnotesPart, "load", autospec=False)
39+
40+
@pytest.fixture
41+
def endnotes_part_(self, request):
42+
return instance_mock(request, EndnotesPart)
43+
44+
@pytest.fixture
45+
def package_(self, request):
46+
return instance_mock(request, Package)

0 commit comments

Comments
 (0)