21 from __future__
import print_function
24 from xml.sax
import make_parser,handler
25 from xml.sax.xmlreader
import InputSource
26 import xml.sax.saxutils
28 from cStringIO
import StringIO
30 from io
import StringIO
32 MANIFESTNS=
"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"
61 method = self.elements.get(tag, (
None,
None))[0]
68 method = self.elements.get(tag, (
None,
None))[1]
84 m = attrs.get((MANIFESTNS,
'media-type'),
"application/octet-stream")
85 p = attrs.get((MANIFESTNS,
'full-path'))
86 self.manifest[p] = {
'media-type':m,
'full-path':p }
97 parser = make_parser()
98 parser.setFeature(handler.feature_namespaces, 1)
99 parser.setContentHandler(odhandler)
100 parser.setErrorHandler(handler.ErrorHandler())
102 inpsrc = InputSource()
103 if not isinstance(manifestxml, str):
104 manifestxml=manifestxml.decode(
"utf-8")
105 inpsrc.setByteStream(StringIO(manifestxml))
108 return odhandler.manifest
111 z = zipfile.ZipFile(odtfile)
112 manifest = z.read(
'META-INF/manifest.xml')
116 if __name__ ==
"__main__":
119 for file
in result.values():
120 print (
"%-40s %-40s" % (file[
'media-type'], file[
'full-path']))
The ODFManifestHandler parses a manifest file and produces a list of content.