code: def fetch_zip(url, output_path, feature_type, progress_dialog=None):
      
      LOGGER.debug('Downloading file from URL: %s' % url)
      LOGGER.debug('Downloading to: %s' % output_path)
  
      if progress_dialog:
          progress_dialog.show()
  
          # Infinite progress bar when the server is fetching data.
          # The progress bar will be updated with the file size later.
          progress_dialog.setMaximum(0)
          progress_dialog.setMinimum(0)
          progress_dialog.setValue(0)
  
          # Get a pretty label from feature_type, but not translatable
          label_feature_type = feature_type.replace('-', ' ')
  
          label_text = tr('Fetching %s' % label_feature_type)
          progress_dialog.setLabelText(label_text)
  
      # Download Process
      downloader = FileDownloader(url, output_path, progress_dialog)
      try:
          result = downloader.download()
      except IOError as ex:
          raise IOError(ex)
  
      if result[0] is not True:
          _, error_message = result
  
          if result[0] == QNetworkReply.OperationCanceledError:
              raise CanceledImportDialogError(error_message)
          else:
              raise DownloadError(error_message)
docs: Download zip containing shp file and write to output_path.
  
      .. versionadded:: 3.2
  
      :param url: URL of the zip bundle.
      :type url: str
  
      :param output_path: Path of output file,
      :type output_path: str
  
      :param feature_type: What kind of features should be downloaded.
          Currently 'buildings', 'building-points' or 'roads' are supported.
      :type feature_type: str
  
      :param progress_dialog: A progress dialog.
      :type progress_dialog: QProgressDialog
  
      :raises: ImportDialogError - when network error occurred