21 from __future__
import print_function
24 from defusedxml.sax
import make_parser
25 from xml.sax
import handler
26 from xml.sax.xmlreader
import InputSource
27 import xml.sax.saxutils
29 from cStringIO
import StringIO
31 from io
import StringIO
33 MANIFESTNS=
"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"
62 method = self.
elements.get(tag, (
None,
None))[0]
69 method = self.
elements.get(tag, (
None,
None))[1]
85 m = attrs.get((MANIFESTNS,
'media-type'),
"application/octet-stream")
86 p = attrs.get((MANIFESTNS,
'full-path'))
87 self.manifest[p] = {
'media-type':m,
'full-path':p }
98 parser = make_parser()
99 parser.setFeature(handler.feature_namespaces, 1)
100 parser.setContentHandler(odhandler)
101 parser.setErrorHandler(handler.ErrorHandler())
103 inpsrc = InputSource()
104 if not isinstance(manifestxml, str):
105 manifestxml=manifestxml.decode(
"utf-8")
106 inpsrc.setByteStream(StringIO(manifestxml))
109 return odhandler.manifest
112 z = zipfile.ZipFile(odtfile)
113 manifest = z.read(
'META-INF/manifest.xml')
117 if __name__ ==
"__main__":
120 for file
in result.values():
121 print (
"%-40s %-40s" % (file[
'media-type'], file[
'full-path']))