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.