From a33709d515b8f231e4c6ccb339c0bc2c7957fbb1 Mon Sep 17 00:00:00 2001 From: sunnyar Date: Sat, 20 Apr 2024 20:47:46 -0400 Subject: [PATCH 1/2] Add support for macro enabled template --- src/docx/__init__.py | 1 + src/docx/api.py | 6 ++++-- src/docx/opc/constants.py | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/docx/__init__.py b/src/docx/__init__.py index b214045d1..880b18c21 100644 --- a/src/docx/__init__.py +++ b/src/docx/__init__.py @@ -42,6 +42,7 @@ def part_class_selector(content_type: str, reltype: str) -> Type[Part] | 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_DOCUMENT_MACRO_ENABLED_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 diff --git a/src/docx/api.py b/src/docx/api.py index a17c1dad4..b85ed4f12 100644 --- a/src/docx/api.py +++ b/src/docx/api.py @@ -7,7 +7,6 @@ import os from typing import IO - from docx.opc.constants import CONTENT_TYPE as CT from docx.package import Package @@ -21,7 +20,10 @@ def Document(docx: str | IO[bytes] | None = None): """ docx = _default_docx_path() if docx is None else docx document_part = Package.open(docx).main_document_part - if document_part.content_type != CT.WML_DOCUMENT_MAIN: + if document_part.content_type not in [ + CT.WML_DOCUMENT_MAIN, + CT.WML_DOCUMENT_MACRO_ENABLED_MAIN, + ]: tmpl = "file '%s' is not a Word file, content type is '%s'" raise ValueError(tmpl % (docx, document_part.content_type)) return document_part.document diff --git a/src/docx/opc/constants.py b/src/docx/opc/constants.py index 89d3c16cc..fbf61bc22 100644 --- a/src/docx/opc/constants.py +++ b/src/docx/opc/constants.py @@ -209,6 +209,9 @@ class CONTENT_TYPE: "application/vnd.openxmlformats-officedocument.wordprocessingml.docu" "ment.main+xml" ) + WML_DOCUMENT_MACRO_ENABLED_MAIN = ( + "application/vnd.ms-word.template.macroEnabledTemplate.main+xml" + ) WML_ENDNOTES = ( "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml" ) From 7e6bed8a837bd27b5aaaa14388ff1724261758e5 Mon Sep 17 00:00:00 2001 From: sunnyar Date: Sat, 20 Apr 2024 20:50:29 -0400 Subject: [PATCH 2/2] revert newline removal --- src/docx/api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/docx/api.py b/src/docx/api.py index b85ed4f12..61d85cc90 100644 --- a/src/docx/api.py +++ b/src/docx/api.py @@ -7,6 +7,7 @@ import os from typing import IO + from docx.opc.constants import CONTENT_TYPE as CT from docx.package import Package