aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mammoth/conversion.py5
-rw-r--r--mammoth/docx/__init__.py18
2 files changed, 18 insertions, 5 deletions
diff --git a/mammoth/conversion.py b/mammoth/conversion.py
index b3b41d0..e21e3a0 100644
--- a/mammoth/conversion.py
+++ b/mammoth/conversion.py
@@ -73,8 +73,11 @@ class DocumentConverter(object):
def _convert_image(self, image, html_generator):
- with image.open() as image_bytes:
+ image_bytes = image.open()
+ try:
encoded_src = base64.b64encode(image_bytes.read()).decode("ascii")
+ finally:
+ image_bytes.close()
attributes = {
"src": "data:{0};base64,{1}".format(image.content_type, encoded_src)
diff --git a/mammoth/docx/__init__.py b/mammoth/docx/__init__.py
index de15b78..41c42a8 100644
--- a/mammoth/docx/__init__.py
+++ b/mammoth/docx/__init__.py
@@ -1,4 +1,5 @@
import zipfile
+import contextlib
from ..results import Result
from .xmlparser import parse_xml
@@ -21,19 +22,19 @@ _namespaces = [
def read(fileobj):
zip_file = zipfile.ZipFile(fileobj)
- with zip_file.open("[Content_Types].xml") as content_types_fileobj:
+ with _open_entry(zip_file, "[Content_Types].xml") as content_types_fileobj:
content_types = read_content_types_xml_element(_parse_docx_xml(content_types_fileobj))
- with zip_file.open("word/_rels/document.xml.rels") as relationships_fileobj:
+ with _open_entry(zip_file, "word/_rels/document.xml.rels") as relationships_fileobj:
relationships = read_relationships_xml_element(_parse_docx_xml(relationships_fileobj))
if _has_entry(zip_file, "word/numbering.xml"):
- with zip_file.open("word/numbering.xml") as numbering_fileobj:
+ with _open_entry(zip_file, "word/numbering.xml") as numbering_fileobj:
numbering = read_numbering_xml_element(_parse_docx_xml(numbering_fileobj))
else:
numbering = Numbering({})
- with zip_file.open("word/document.xml") as document_fileobj:
+ with _open_entry(zip_file, "word/document.xml") as document_fileobj:
document_xml = _parse_docx_xml(document_fileobj)
return read_document_xml_element(
document_xml,
@@ -48,6 +49,15 @@ def _parse_docx_xml(fileobj):
return parse_xml(fileobj, _namespaces)
+@contextlib.contextmanager
+def _open_entry(zip_file, name):
+ entry = zip_file.open(name)
+ try:
+ yield entry
+ finally:
+ entry.close()
+
+
def _has_entry(zip_file, name):
try:
zip_file.getinfo(name)