Source code for copyxnat.pyreporter.progress

# coding=utf-8

"""Class for displaying a progress bar"""


[docs]class Progress: """Class for displaying a progress bar""" def __init__(self, console): self._console = console self._iter_num = None self._max_iter = None self._message = None
[docs] def start_progress(self, message, max_iter): """ Display a progress bar @param message: message to display in the progress bar @param max_iter: total number of iterations """ self._max_iter = max_iter self._iter_num = 0 self._message = message self.next_progress()
[docs] def next_progress(self): """Update existing progress bar to next step""" if self._iter_num is not None and self._max_iter is not None: width = 50 num_bars = int(width*self._iter_num//self._max_iter) if \ self._max_iter >= 1 else width bar_str = '█'*num_bars + '-'*(width - num_bars) progress_text = '\r{} |{}| {:3d}/{} done'.format(self._message, bar_str, self._iter_num, self._max_iter ) self._iter_num = self._iter_num + 1 else: progress_text = self._message self._console.sticky_text(progress_text)
[docs] def complete_progress(self): """Complete progress bar""" # Make sure the progress bar shows as complete self._iter_num = self._max_iter self.next_progress() # End the updating of this progress bar self._console.end_sticky() self._message = None