🌐 AI搜索 & 代理 主页
Skip to content

Commit faccb45

Browse files
committed
hdr: add _BaseHeaderFooter.part
1 parent e52d32f commit faccb45

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

docx/section.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,17 @@ def is_linked_to_previous(self, value):
243243
else:
244244
self._add_definition()
245245

246+
@property
247+
def part(self):
248+
"""The |HeaderPart| or |FooterPart| for this header/footer.
249+
250+
This overrides `BlockItemContainer.part` and is required to support image
251+
insertion and perhaps other content like hyperlinks.
252+
"""
253+
# ---should not appear in documentation;
254+
# ---not an interface property, even though public
255+
return self._get_or_add_definition()
256+
246257
def _add_definition(self):
247258
"""Return newly-added header/footer part."""
248259
raise NotImplementedError("must be implemented by each subclass")

tests/test_section.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,18 @@ def it_can_change_whether_it_is_linked_to_previous_header_or_footer(
387387
assert _drop_definition_.call_args_list == [call(header)] * drop_calls
388388
assert _add_definition_.call_args_list == [call(header)] * add_calls
389389

390+
def it_provides_access_to_the_header_or_footer_part_for_BlockItemContainer(
391+
self, _get_or_add_definition_, header_part_
392+
):
393+
# ---this override fulfills part of the BlockItemContainer subclass interface---
394+
_get_or_add_definition_.return_value = header_part_
395+
header = _BaseHeaderFooter(None, None)
396+
397+
header_part = header.part
398+
399+
_get_or_add_definition_.assert_called_once_with(header)
400+
assert header_part is header_part_
401+
390402
def it_provides_access_to_the_hdr_or_ftr_element_to_help(
391403
self, _get_or_add_definition_, header_part_
392404
):

0 commit comments

Comments
 (0)