docs: def progress_report(self, force=False):
          '''
          Print the current progress.
  
          :param bool force: If `True`, print the report regardless of the
              elapsed time since the last progress report.
          '''
          now = datetime.datetime.now()
          if (len(self.task_stack) > 1 or self.task_stack[0] > 0) and \
                  now - self.last_report < self.resolution and not force:
              return
  
          stack_printout = ', '.join('%s %s of %s' % (t.name, t.progress, t.size)
                                     for t in self.task_stack)
  
          frac_done = self.fraction_done()
          if frac_done == 0.0:
              now_str = now.strftime('%c')
              eta_str = 'unknown on %s' % now_str
          else:
              elapsed = (now - self.start_time)
              estimated_length = elapsed.total_seconds() / frac_done
              eta = self.start_time + datetime.timedelta(seconds=estimated_length)
              eta_str = eta.strftime('%c')
  
          print '%s (~%d%% done, ETA %s)' % (stack_printout,
                                             round(frac_done * 100.0),
                                             eta_str)
          self.last_report = datetime.datetime.now()