Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 64e9836

Browse filesBrowse files
committed
hdr: add FooterPart.new()
1 parent 7f4e820 commit 64e9836
Copy full SHA for 64e9836

File tree

Expand file treeCollapse file tree

2 files changed

+48
-2
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+48
-2
lines changed
Open diff view settings
Collapse file

‎docx/parts/hdrftr.py‎

Copy file name to clipboardExpand all lines: docx/parts/hdrftr.py
+8Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ class FooterPart(XmlPart):
1717
@classmethod
1818
def new(cls, package):
1919
"""Return newly created footer part."""
20+
partname = package.next_partname("/word/footer%d.xml")
21+
content_type = CT.WML_FOOTER
22+
element = parse_xml(cls._default_footer_xml())
23+
return cls(partname, content_type, element, package)
24+
25+
@classmethod
26+
def _default_footer_xml(cls):
27+
"""Return bytes containing XML for a default footer part."""
2028
raise NotImplementedError
2129

2230

Collapse file

‎tests/parts/test_hdrftr.py‎

Copy file name to clipboardExpand all lines: tests/parts/test_hdrftr.py
+40-2Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,50 @@
99
from docx.opc.constants import CONTENT_TYPE as CT, RELATIONSHIP_TYPE as RT
1010
from docx.opc.part import PartFactory
1111
from docx.package import Package
12-
from docx.parts.hdrftr import HeaderPart
12+
from docx.parts.hdrftr import FooterPart, HeaderPart
1313

1414
from ..unitutil.cxml import element
1515
from ..unitutil.mock import function_mock, initializer_mock, instance_mock, method_mock
1616

1717

18+
class DescribeFooterPart(object):
19+
20+
def it_can_create_a_new_footer_part(
21+
self, package_, _default_footer_xml_, parse_xml_, _init_
22+
):
23+
ftr = element("w:ftr")
24+
package_.next_partname.return_value = "/word/footer24.xml"
25+
_default_footer_xml_.return_value = "<w:ftr>"
26+
parse_xml_.return_value = ftr
27+
28+
footer_part = FooterPart.new(package_)
29+
30+
package_.next_partname.assert_called_once_with("/word/footer%d.xml")
31+
_default_footer_xml_.assert_called_once_with()
32+
parse_xml_.assert_called_once_with("<w:ftr>")
33+
_init_.assert_called_once_with(
34+
footer_part, "/word/footer24.xml", CT.WML_FOOTER, ftr, package_
35+
)
36+
37+
# fixture components ---------------------------------------------
38+
39+
@pytest.fixture
40+
def _default_footer_xml_(self, request):
41+
return method_mock(request, FooterPart, "_default_footer_xml", autospec=False)
42+
43+
@pytest.fixture
44+
def _init_(self, request):
45+
return initializer_mock(request, FooterPart)
46+
47+
@pytest.fixture
48+
def package_(self, request):
49+
return instance_mock(request, Package)
50+
51+
@pytest.fixture
52+
def parse_xml_(self, request):
53+
return function_mock(request, "docx.parts.hdrftr.parse_xml")
54+
55+
1856
class DescribeHeaderPart(object):
1957

2058
def it_is_used_by_loader_to_construct_header_part(
@@ -73,7 +111,7 @@ def header_part_(self, request):
73111

74112
@pytest.fixture
75113
def _init_(self, request):
76-
return initializer_mock(request, HeaderPart, autospec=True)
114+
return initializer_mock(request, HeaderPart)
77115

78116
@pytest.fixture
79117
def package_(self, request):

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.