code: def _chunk_read_(response, local_file, chunk_size=8192, report_hook=None,
                   initial_size=0, total_size=None, verbose=1):
      
      try:
          if total_size is None:
              total_size = response.info().get('Content-Length').strip()
          total_size = int(total_size) + initial_size
      except Exception as exc:
          if verbose > 2:
              NIWORKFLOWS_LOG.warn('Total size of chunk could not be determined')
              if verbose > 3:
                  NIWORKFLOWS_LOG.warn("Full stack trace: %s", str(exc))
          total_size = None
      bytes_so_far = initial_size
  
      t_0 = time_last_display = time.time()
      while True:
          chunk = response.read(chunk_size)
          bytes_so_far += len(chunk)
          time_last_read = time.time()
          if (report_hook and
                  # Refresh report every half second or when download is
                  # finished.
                  (time_last_read > time_last_display + 0.5 or not chunk)):
              _chunk_report_(bytes_so_far,
                             total_size, initial_size, t_0)
              time_last_display = time_last_read
          if chunk:
              local_file.write(chunk)
          else:
              break
  
      return
docs: Download a file chunk by chunk and show advancement
  
      :param urllib.response.addinfourl response: response to the download
          request in order to get file size
      :param str local_file: hard disk file where data should be written
      :param int chunk_size: size of downloaded chunks. Default: 8192
      :param bool report_hook: whether or not to show downloading advancement
      :param int initial_size: if resuming, indicate the initial size of the file
      :param int total_size: Expected final size of download (None means it
          is unknown).
      :param int verbose: verbosity level (0 means no message).
      :returns: the downloaded file path.
      :rtype: string