diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-12-14 18:07:19 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-12-14 18:07:19 +0000 |
| commit | 0c8ee31a154b5e624f207fb1413295ef2bf45417 (patch) | |
| tree | fe9c0a681b7c83bd596401d95f480333399f3438 /mammoth/docx | |
| parent | ecd606c058923c534d1f96fd95110e1edcc70bca (diff) | |
Support Python 2.6
Diffstat (limited to 'mammoth/docx')
| -rw-r--r-- | mammoth/docx/__init__.py | 18 |
1 files changed, 14 insertions, 4 deletions
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) |
