Beispiel #1
0
 def run(self):
     failed = []
     for library in self._options.libraries:
         try:
             xml_doc = StringIO()
             # LibraryDocumentation().save() calls close() for the underlying
             # file but closing StringIO object discards its data.
             # This is why close() is overridden below.
             xml_doc.original_close = xml_doc.close
             try:
                 try:
                     if library.endswith('.xml'):
                         with open(library) as xml_file:
                             xml_doc.write(xml_file.read())
                     else:
                         xml_doc.close = lambda: None
                         LibraryDocumentation(library).save(xml_doc, 'xml')
                 except DataError as e:
                     message = "Library not found" if 'ImportError' in e.message else e.message
                     failed.append(library)
                     sys.stderr.write(
                         "Skipping '%s' due to an error: %s.\n" %
                         (library, message))
                     continue
                 xml_doc.name = library
                 self._uploader.upload_file(xml_doc, self._options.lib_name,
                                            self._options.lib_version)
                 sys.stdout.write("Updated documentation for '%s'.\n" %
                                  library)
             finally:
                 xml_doc.original_close()
         except DataError as e:
             failed.append(library)
             sys.stderr.write('%s: Remote error: %s\n' %
                              (os.path.basename(__file__), e.message))
     if failed:
         sys.stderr.write('\nERROR: Uploading %d file(s) failed:\n' %
                          len(failed))
         for name in failed:
             sys.stderr.write('* %s\n' % name)
         exit(1)