home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2104 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  3.5 KB  |  89 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import zipfile
  5. from xml.sax import make_parser, handler
  6. from xml.sax.xmlreader import InputSource
  7. import xml.sax.saxutils as xml
  8. from cStringIO import StringIO
  9. MANIFESTNS = 'urn:oasis:names:tc:opendocument:xmlns:manifest:1.0'
  10.  
  11. class ODFManifestHandler(handler.ContentHandler):
  12.     
  13.     def __init__(self):
  14.         self.manifest = { }
  15.         self.elements = {
  16.             (MANIFESTNS, 'file-entry'): (self.s_file_entry, self.donothing) }
  17.  
  18.     
  19.     def handle_starttag(self, tag, method, attrs):
  20.         method(tag, attrs)
  21.  
  22.     
  23.     def handle_endtag(self, tag, method):
  24.         method(tag)
  25.  
  26.     
  27.     def startElementNS(self, tag, qname, attrs):
  28.         method = self.elements.get(tag, (None, None))[0]
  29.         if method:
  30.             self.handle_starttag(tag, method, attrs)
  31.         else:
  32.             self.unknown_starttag(tag, attrs)
  33.  
  34.     
  35.     def endElementNS(self, tag, qname):
  36.         method = self.elements.get(tag, (None, None))[1]
  37.         if method:
  38.             self.handle_endtag(tag, method)
  39.         else:
  40.             self.unknown_endtag(tag)
  41.  
  42.     
  43.     def unknown_starttag(self, tag, attrs):
  44.         pass
  45.  
  46.     
  47.     def unknown_endtag(self, tag):
  48.         pass
  49.  
  50.     
  51.     def donothing(self, tag, attrs = None):
  52.         pass
  53.  
  54.     
  55.     def s_file_entry(self, tag, attrs):
  56.         m = attrs.get((MANIFESTNS, 'media-type'), 'application/octet-stream')
  57.         p = attrs.get((MANIFESTNS, 'full-path'))
  58.         self.manifest[p] = {
  59.             'media-type': m,
  60.             'full-path': p }
  61.  
  62.  
  63.  
  64. def manifestlist(manifestxml):
  65.     odhandler = ODFManifestHandler()
  66.     parser = make_parser()
  67.     parser.setFeature(handler.feature_namespaces, 1)
  68.     parser.setContentHandler(odhandler)
  69.     parser.setErrorHandler(handler.ErrorHandler())
  70.     inpsrc = InputSource()
  71.     inpsrc.setByteStream(StringIO(manifestxml))
  72.     parser.parse(inpsrc)
  73.     return odhandler.manifest
  74.  
  75.  
  76. def odfmanifest(odtfile):
  77.     z = zipfile.ZipFile(odtfile)
  78.     manifest = z.read('META-INF/manifest.xml')
  79.     z.close()
  80.     return manifestlist(manifest)
  81.  
  82. if __name__ == '__main__':
  83.     import sys
  84.     result = odfmanifest(sys.argv[1])
  85.     for file in result.values():
  86.         print '%-40s %-40s' % (file['media-type'], file['full-path'])
  87.     
  88.  
  89.