A progress tracker with methods for throughput, ETA and update notification
Project description
Release 20190812: New OverProgress class which is a composite of a set of subsidiary Progress instances. Assorted other small updates.
A progress tracker with methods for throughput, ETA and update notification.
Class BaseProgress
The base class for Progress
and OverProcess
with various common methods.
Note that durations are in seconds
and that absolute time is in seconds since the UNIX epoch
(the basis of time.time()
).
Class CheckPoint
MRO: builtins.tuple
CheckPoint(time, position)
Class OverProgress
MRO: BaseProgress
A Progress
-like class computed from a set of subsidiary Process
es.
Example:
>>> P = OverProgress(name="over")
>>> P1 = Progress(name="progress1", position=12)
>>> P1.total = 100
>>> P1.advance(7)
>>> P2 = Progress(name="progress2", position=20)
>>> P2.total = 50
>>> P2.advance(9)
>>> P.add(P1)
>>> P.add(P2)
>>> P1.total
100
>>> P2.total
50
>>> P.total
150
>>> P1.start
12
>>> P2.start
20
>>> P.start
0
>>> P1.position
19
>>> P2.position
29
>>> P.position
16
Class Progress
MRO: BaseProgress
A progress counter to track task completion with various utility methods.
Example:
>>> P = Progress(name="example")
>>> P #doctest: +ELLIPSIS
Progress(name='example',start=0,position=0,start_time=...,thoughput_window=None,total=None):[CheckPoint(time=..., position=0)]
>>> P.advance(5)
>>> P #doctest: +ELLIPSIS
Progress(name='example',start=0,position=5,start_time=...,thoughput_window=None,total=None):[CheckPoint(time=..., position=0), CheckPoint(time=..., position=5)]
>>> P.total = 100
>>> P #doctest: +ELLIPSIS
Progress(name='example',start=0,position=5,start_time=...,thoughput_window=None,total=100):[CheckPoint(time=..., position=0), CheckPoint(time=..., position=5)]
A Progress instance has an attribute notify_update
which
is a set of callables. Whenever the position is updated, each
of these will be called with the Progress
instance and the
latest CheckPoint
.
Progress
objects also make a small pretense of being an integer.
The expression int(progress)
returns the current position,
and +=
and -=
adjust the position.
This is convenient for coding, but importantly it is also
useful for discretionary use of a Progress with some other
object.
If you want to make a lightweight Progress
capable class
you can set a position attribute to an int
and manipulate it carefully using +=
and -=
entirely.
If you decide to incur the cost of maintaining a Progress
object
you can slot it in:
# initial setup with just an int
my_thing.amount = 0
# later, or on some option, use a Progress instance
my_thing.amount = Progress(my_thing.amount)
Method Progress.__init__(self, position=None, name=None, start=None, start_time=None, throughput_window=None, total=None)
Initialise the Progesss object.
Parameters:
position
: initial position, default0
.name
: optional name for this instance.start
: starting position of progress range, default fromposition
.start_time
: start time of the process, default now.throughput_window
: length of throughput time window in seconds, default None.total
: expected completion value, default None.
Release Log
Release 20190812: New OverProgress class which is a composite of a set of subsidiary Progress instances. Assorted other small updates.
Release 20190220: Progress: be somewhat like an int. New status() method returning a convenient one line progress status report.
Release 20180703.2: Progress: make .total into a property in order to fire the update notifications.
Release 20180703.1: Progress: additions and changes to API: new .ratio, .elapsed_time, rename .projected to .remaining_time.
Release 20180703: Initial release of cs.progress.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.