From 0c8ee31a154b5e624f207fb1413295ef2bf45417 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 14 Dec 2013 18:07:19 +0000 Subject: Support Python 2.6 --- mammoth/conversion.py | 5 ++++- mammoth/docx/__init__.py | 18 ++++++++++++++---- 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) -- cgit v1.2.3