Skip to content

Commit e6d234c

Browse files
committed
hdr: add _Header._element
1 parent b0f81bc commit e6d234c

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

docx/section.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,22 @@ def _drop_header_part(self):
262262
rId = self._sectPr.remove_headerReference(WD_HEADER_FOOTER.PRIMARY)
263263
self._document_part.drop_header_part(rId)
264264

265+
@property
266+
def _element(self):
267+
"""`w:hdr` element, root of header part."""
268+
return self._get_or_add_header_part().element
269+
270+
def _get_or_add_header_part(self):
271+
"""Return |HeaderPart| object for this header.
272+
273+
If this header inherits its content, the header part for the prior header is
274+
returned; this process continue recursively until a header is found. If this
275+
header cannot inherit (it belongs to the first section), a new header part is
276+
created for the first section and returned.
277+
"""
278+
# ---note this method is called recursively to access inherited headers---
279+
raise NotImplementedError
280+
265281
@property
266282
def _has_header_part(self):
267283
"""True if a header is explicitly defined for this section."""

tests/test_section.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,19 @@ def it_can_drop_the_related_header_part_to_help(self, document_part_):
409409
assert sectPr.xml == xml("w:sectPr{r:a=b}")
410410
document_part_.drop_header_part.assert_called_once_with("rId42")
411411

412+
def it_provides_access_to_the_hdr_element_to_help(
413+
self, _get_or_add_header_part_, header_part_
414+
):
415+
hdr = element("w:hdr")
416+
_get_or_add_header_part_.return_value = header_part_
417+
header_part_.element = hdr
418+
header = _Header(None, None)
419+
420+
hdr_elm = header._element
421+
422+
_get_or_add_header_part_.assert_called_once_with(header)
423+
assert hdr_elm is hdr
424+
412425
def it_knows_when_it_has_a_header_part_to_help(self, has_header_part_fixture):
413426
sectPr, expected_value = has_header_part_fixture
414427
header = _Header(sectPr, None)
@@ -450,15 +463,19 @@ def is_linked_set_fixture(self, request):
450463

451464
@pytest.fixture
452465
def _add_header_part_(self, request):
453-
return method_mock(request, _Header, "_add_header_part", autospec=True)
466+
return method_mock(request, _Header, "_add_header_part")
454467

455468
@pytest.fixture
456469
def document_part_(self, request):
457470
return instance_mock(request, DocumentPart)
458471

459472
@pytest.fixture
460473
def _drop_header_part_(self, request):
461-
return method_mock(request, _Header, "_drop_header_part", autospec=True)
474+
return method_mock(request, _Header, "_drop_header_part")
475+
476+
@pytest.fixture
477+
def _get_or_add_header_part_(self, request):
478+
return method_mock(request, _Header, "_get_or_add_header_part")
462479

463480
@pytest.fixture
464481
def _has_header_part_prop_(self, request):

0 commit comments

Comments
 (0)