code: def progress(self, value, new_status=None):
      
      space_fillers = 0
  
      if new_status is not None:
        # if new text is shorter, then we need fill previously used place
        space_fillers = len(self._status_msg) - len(new_status) if self._status_msg and len(self._status_msg) - len(new_status) > 0 else 0
        self._status_msg = new_status
  
      if not self._infinite_mode and value > self._max:
        self._infinite_mode = True
        self._fill_empty()
  
      self._timer.tick(value)
  
      if not self._infinite_mode:
        percent_done = self._calc_percent_done(value)
        filled = self._options.fill_char * int(self._calc_filled_space(percent_done))
        empty = self._options.blank_char * int(self._calc_empty_space(percent_done))
      else:
        percent_done = 100
        self._infinite_position = 1 if self._infinite_position + self._infinite_width >= self._width else self._infinite_position + 1
        filled = "%s%s" % (self._options.blank_char * (self._infinite_position - self._infinite_width), self._options.fill_char * self._infinite_width)
        empty = self._options.blank_char * int(self._width - self._infinite_position)
  
      kwargs = {
        "begin_line": self._begin_line_character,
        "text": self._text,
        "status": self._status_msg,
        "end_line": " " * space_fillers,
        "filled": filled,
        "reverse_filled": filled[::-1],
        "empty": empty,
        "value": int(value),
        "max": int(self._max),
        "items_per_sec": self._timer.unit_per_sec,
        "percents_done": percent_done
      }
  
      self.stdout.write(safe_format(self._options.progress_format.value, **kwargs))
      self.stdout.flush()
docs: :type value int
      :type new_status str