"""Header and footer part objects.""" from __future__ import annotations import os from typing import TYPE_CHECKING from docx.opc.constants import CONTENT_TYPE as CT from docx.oxml.parser import parse_xml from docx.parts.story import StoryPart if TYPE_CHECKING: from docx.package import Package class FooterPart(StoryPart): """Definition of a section footer.""" @classmethod def new(cls, package: Package): """Return newly created footer part.""" partname = package.next_partname("/word/footer%d.xml") content_type = CT.WML_FOOTER element = parse_xml(cls._default_footer_xml()) return cls(partname, content_type, element, package) @classmethod def _default_footer_xml(cls): """Return bytes containing XML for a default footer part.""" path = os.path.join(os.path.split(__file__)[0], "..", "templates", "default-footer.xml") with open(path, "rb") as f: xml_bytes = f.read() return xml_bytes class HeaderPart(StoryPart): """Definition of a section header.""" @classmethod def new(cls, package: Package): """Return newly created header part.""" partname = package.next_partname("/word/header%d.xml") content_type = CT.WML_HEADER element = parse_xml(cls._default_header_xml()) return cls(partname, content_type, element, package) @classmethod def _default_header_xml(cls): """Return bytes containing XML for a default header part.""" path = os.path.join(os.path.split(__file__)[0], "..", "templates", "default-header.xml") with open(path, "rb") as f: xml_bytes = f.read() return xml_bytes