Source code for plogpro.progressbar

from abc  import ABCMeta, abstractmethod
from time import time


[docs]class ProgressBar(metaclass=ABCMeta): """Base class that provides an interface for progress bars To create a progress bar, create an instance of one of its implementations. The progressbar can then be updated by calling the method ``update()``. To implement a new progress bar, create a class that derives from ``ProgressBar`` and implement the method ``draw()``. This method should draw the progress bar based on the accessible member variables. If you need to do anything once in the beginning or the and, you can override the ``setup()`` and/or ``teardown()`` methods respectively. Warning: The ``update()`` method should **not** be overwritten. Arguments: nsteps (int) The number of steps that the progressbar will go through Attributes: nsteps (int) The number of steps that the progressbar will go through step (int) The current step of the iteration, going from ``0`` to ``nsteps`` start_time (float) The start time of the progress bar in seconds since Epoch current_time (float) The current time of the progress bar in seconds since Epoch """ def __init__(self, nsteps): self.nsteps = nsteps self.step = 0 self.start_time = time() self.current_time = time() self.setup() def __del__(self): self.teardown() def setup(self): pass def teardown(self): pass
[docs] def update(self, step=None): """Update the progressbar Arguments: step (int, optional) The current step of the operation, the progress will be increased with one step if not provided (default: `None`) """ self.current_time = time() if step is None: self.step += 1 else: self.step = step self.draw()
[docs] def progress(self): """Get the progress as a number between 0 and 1 Returns: float: The progress """ return self.step / self.nsteps
@abstractmethod def draw(self): raise NotImplementedError