code: def make_zip(self, filename, files=None, path=None, clone=None, compress=True):
      
      if filename and os.path.exists(filename):
        raise IOError('File exists: %s'%filename)
      files = files or []
      arcnames = []
      if path and os.path.isdir(path):
        files += glob.glob(os.path.join(path, '*.txt'))
      if compress:
        compress_level = zipfile.ZIP_DEFLATED
      else:
        compress_level = zipfile.ZIP_STORED
  
      # Write files.
      self.log("Creating zip archive: %s"%filename)
      zf = zipfile.ZipFile(filename, 'a', compression=compress_level)
      for f in files:
        base = os.path.basename(f)
        if base in arcnames:
          self.log('... skipping: %s'%f)
        else:
          self.log('... adding: %s'%f)
          arcnames.append(base)
          zf.write(f, base)
  
      # Clone from existing zip archive.
      if clone and os.path.exists(clone):
        zc = zipfile.ZipFile(clone)
        for f in zc.namelist():
          base = os.path.basename(f)
          if os.path.splitext(base)[-1] != '.txt':
            pass
            # self.log('... skipping from clone: %s'%f)
          elif base in arcnames:
            self.log('... skipping from clone: %s'%f)
          else:
            self.log('... adding from clone: %s'%f)
            arcnames.append(base)
            with zc.open(f) as i:
              data = i.read()
            zf.writestr(base, data)
      zf.close()
docs: Create a Zip archive.
  
      Provide any of the following:
        files - A list of files
        path - A directory of .txt files
        clone - Copy any files from a zip archive not specified above
  
      Duplicate files will be ignored. The 'files' argument will be used first,
      then files found in the specified 'path', then in the
      specified 'clone' archive.