"""Initialize `docx` package. Export the `Document` constructor function and establish the mapping of part-type to the part-classe that implements that type. """ from __future__ import annotations from typing import TYPE_CHECKING, Type from docx.api import Document if TYPE_CHECKING: from docx.opc.part import Part __version__ = "1.1.2" __all__ = ["Document"] # -- register custom Part classes with opc package reader -- from docx.opc.constants import CONTENT_TYPE as CT from docx.opc.constants import RELATIONSHIP_TYPE as RT from docx.opc.part import PartFactory from docx.opc.parts.coreprops import CorePropertiesPart from docx.parts.document import DocumentPart from docx.parts.hdrftr import FooterPart, HeaderPart from docx.parts.image import ImagePart from docx.parts.numbering import NumberingPart from docx.parts.settings import SettingsPart from docx.parts.styles import StylesPart def part_class_selector(content_type: str, reltype: str) -> Type[Part] | None: if reltype == RT.IMAGE: return ImagePart return None PartFactory.part_class_selector = part_class_selector PartFactory.part_type_for[CT.OPC_CORE_PROPERTIES] = CorePropertiesPart PartFactory.part_type_for[CT.WML_DOCUMENT_MAIN] = DocumentPart PartFactory.part_type_for[CT.WML_FOOTER] = FooterPart PartFactory.part_type_for[CT.WML_HEADER] = HeaderPart PartFactory.part_type_for[CT.WML_NUMBERING] = NumberingPart PartFactory.part_type_for[CT.WML_SETTINGS] = SettingsPart PartFactory.part_type_for[CT.WML_STYLES] = StylesPart del ( CT, CorePropertiesPart, DocumentPart, FooterPart, HeaderPart, NumberingPart, PartFactory, SettingsPart, StylesPart, part_class_selector, )