aboutsummaryrefslogtreecommitdiff
path: root/mammoth
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-12-03 18:04:34 +0000
committerMichael Williamson <mike@zwobble.org>2013-12-03 18:04:34 +0000
commit5e1685645c6b0ed81bc27f3cedfeb0608f79f495 (patch)
treeba1125db8fa05f1cc8a0ffa6f628ca70e250aa07 /mammoth
parent2cbb7baa6615835b7d4cb81dd2300569c0bafd4a (diff)
Read overrides from content types
Diffstat (limited to 'mammoth')
-rw-r--r--mammoth/docx/content_types_xml.py26
1 files changed, 20 insertions, 6 deletions
diff --git a/mammoth/docx/content_types_xml.py b/mammoth/docx/content_types_xml.py
index a2da8e0..a2eb14c 100644
--- a/mammoth/docx/content_types_xml.py
+++ b/mammoth/docx/content_types_xml.py
@@ -1,9 +1,13 @@
def read_content_types_xml_element(element):
extension_defaults = dict(map(
_read_default,
- element.find_children("content-types:Default"))
- )
- return ContentTypes(extension_defaults)
+ element.find_children("content-types:Default")
+ ))
+ overrides = dict(map(
+ _read_override,
+ element.find_children("content-types:Override")
+ ))
+ return ContentTypes(extension_defaults, overrides)
def _read_default(element):
@@ -12,10 +16,20 @@ def _read_default(element):
return extension, content_type
+def _read_override(element):
+ part_name = element.attributes["PartName"]
+ content_type = element.attributes["ContentType"]
+ return part_name.lstrip("/"), content_type
+
+
class ContentTypes(object):
- def __init__(self, extension_defaults):
+ def __init__(self, extension_defaults, overrides):
self._extension_defaults = extension_defaults
+ self._overrides = overrides
def find_content_type(self, path):
- extension = path.rpartition(".")[2]
- return self._extension_defaults.get(extension)
+ if path in self._overrides:
+ return self._overrides[path]
+ else:
+ extension = path.rpartition(".")[2]
+ return self._extension_defaults.get(extension)