Skip to content

Commit b48f860

Browse files
committed
hdr: add Settings.odd_and_even_pages_head.. setter
Add some namespace-prefix mappings that arise for the first time in headers.
1 parent a46dd64 commit b48f860

File tree

5 files changed

+55
-18
lines changed

5 files changed

+55
-18
lines changed

docx/oxml/ns.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,21 @@
88

99

1010
nsmap = {
11-
'a': ('http://schemas.openxmlformats.org/drawingml/2006/main'),
12-
'c': ('http://schemas.openxmlformats.org/drawingml/2006/chart'),
13-
'cp': ('http://schemas.openxmlformats.org/package/2006/metadata/core-pr'
14-
'operties'),
15-
'dc': ('http://purl.org/dc/elements/1.1/'),
16-
'dcmitype': ('http://purl.org/dc/dcmitype/'),
17-
'dcterms': ('http://purl.org/dc/terms/'),
18-
'dgm': ('http://schemas.openxmlformats.org/drawingml/2006/diagram'),
19-
'pic': ('http://schemas.openxmlformats.org/drawingml/2006/picture'),
20-
'r': ('http://schemas.openxmlformats.org/officeDocument/2006/relations'
21-
'hips'),
22-
'w': ('http://schemas.openxmlformats.org/wordprocessingml/2006/main'),
23-
'wp': ('http://schemas.openxmlformats.org/drawingml/2006/wordprocessing'
24-
'Drawing'),
25-
'xml': ('http://www.w3.org/XML/1998/namespace'),
26-
'xsi': ('http://www.w3.org/2001/XMLSchema-instance'),
11+
"a": ("http://schemas.openxmlformats.org/drawingml/2006/main"),
12+
"c": ("http://schemas.openxmlformats.org/drawingml/2006/chart"),
13+
"cp": ("http://schemas.openxmlformats.org/package/2006/metadata/core-properties"),
14+
"dc": ("http://purl.org/dc/elements/1.1/"),
15+
"dcmitype": ("http://purl.org/dc/dcmitype/"),
16+
"dcterms": ("http://purl.org/dc/terms/"),
17+
"dgm": ("http://schemas.openxmlformats.org/drawingml/2006/diagram"),
18+
"m": ("http://schemas.openxmlformats.org/officeDocument/2006/math"),
19+
"pic": ("http://schemas.openxmlformats.org/drawingml/2006/picture"),
20+
"r": ("http://schemas.openxmlformats.org/officeDocument/2006/relationships"),
21+
"sl": ("http://schemas.openxmlformats.org/schemaLibrary/2006/main"),
22+
"w": ("http://schemas.openxmlformats.org/wordprocessingml/2006/main"),
23+
"wp": ("http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"),
24+
"xml": ("http://www.w3.org/XML/1998/namespace"),
25+
"xsi": ("http://www.w3.org/2001/XMLSchema-instance"),
2726
}
2827

2928
pfxmap = dict((value, key) for key, value in nsmap.items())

docx/oxml/settings.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,10 @@ def evenAndOddHeaders_val(self):
5555
if evenAndOddHeaders is None:
5656
return False
5757
return evenAndOddHeaders.val
58+
59+
@evenAndOddHeaders_val.setter
60+
def evenAndOddHeaders_val(self, value):
61+
if value in [None, False]:
62+
self._remove_evenAndOddHeaders()
63+
else:
64+
self.get_or_add_evenAndOddHeaders().val = value

docx/settings.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ def odd_and_even_pages_header_footer(self):
2222
Read/write.
2323
"""
2424
return self._element.evenAndOddHeaders_val
25+
26+
@odd_and_even_pages_header_footer.setter
27+
def odd_and_even_pages_header_footer(self, value):
28+
self._element.evenAndOddHeaders_val = value

features/doc-settings.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ Feature: Document.settings
2525
| without | False |
2626

2727

28-
@wip
2928
Scenario Outline: Settings.odd_and_even_pages_header_footer setter
3029
Given a Settings object <with-or-without> odd and even page headers as settings
3130
When I assign <value> to settings.odd_and_even_pages_header_footer

tests/test_settings.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from docx.settings import Settings
1010

11-
from .unitutil.cxml import element
11+
from .unitutil.cxml import element, xml
1212

1313

1414
class DescribeSettings(object):
@@ -23,6 +23,16 @@ def it_knows_when_the_document_has_distinct_odd_and_even_headers(
2323

2424
assert odd_and_even_pages_header_footer is expected_value
2525

26+
def it_can_change_whether_the_document_has_distinct_odd_and_even_headers(
27+
self, odd_and_even_set_fixture
28+
):
29+
settings_elm, value, expected_xml = odd_and_even_set_fixture
30+
settings = Settings(settings_elm)
31+
32+
settings.odd_and_even_pages_header_footer = value
33+
34+
assert settings_elm.xml == expected_xml
35+
2636
# fixtures -------------------------------------------------------
2737

2838
@pytest.fixture(
@@ -38,3 +48,21 @@ def odd_and_even_get_fixture(self, request):
3848
settings_cxml, expected_value = request.param
3949
settings_elm = element(settings_cxml)
4050
return settings_elm, expected_value
51+
52+
@pytest.fixture(
53+
params=[
54+
("w:settings", True, "w:settings/w:evenAndOddHeaders"),
55+
("w:settings/w:evenAndOddHeaders", False, "w:settings"),
56+
(
57+
"w:settings/w:evenAndOddHeaders{w:val=1}",
58+
True,
59+
"w:settings/w:evenAndOddHeaders"
60+
),
61+
("w:settings/w:evenAndOddHeaders{w:val=off}", False, "w:settings"),
62+
]
63+
)
64+
def odd_and_even_set_fixture(self, request):
65+
settings_cxml, value, expected_cxml = request.param
66+
settings_elm = element(settings_cxml)
67+
expected_xml = xml(expected_cxml)
68+
return settings_elm, value, expected_xml

0 commit comments

Comments
 (0)