Ready for upload to pip
This commit is contained in:
parent
9d29a5425a
commit
045f20061c
4
MANIFEST
Normal file
4
MANIFEST
Normal file
@ -0,0 +1,4 @@
|
||||
# file GENERATED by distutils, do NOT edit
|
||||
setup.py
|
||||
ZProgressbar/ZProgressbar.py
|
||||
ZProgressbar/__init__.py
|
140
ZProgressbar/ZProgressbar.py
Normal file
140
ZProgressbar/ZProgressbar.py
Normal file
@ -0,0 +1,140 @@
|
||||
from time import time
|
||||
from sys import stdout
|
||||
|
||||
|
||||
class ZProgressbar:
|
||||
"""
|
||||
An iterable object that can display statics about its self such as time elapsed, percentage, progress as a fraction,
|
||||
iterations per second, estimated time and can generate an ascii progressbar.
|
||||
"""
|
||||
|
||||
def __init__(self, start, end=None, step=1, length=20, unit="/s", color="\033[0;31m", display=True,
|
||||
bar_format="{elapsed} {percentage} {bar} {rate} {eta}"):
|
||||
"""
|
||||
Create an iterable object with the following properties. If no end is specified the start is assumed the end.
|
||||
:param start: starting position of iterator (inclusive)
|
||||
:param end: ending position of iterator (exclusive)
|
||||
:param step: how many integers to add each iteration
|
||||
:param length: length of the progress bar (default is 20)
|
||||
:param unit: unit to display with the rate (default is /s)
|
||||
:param color: ANSI escape codes prepended to output to change color (default is \033[0;31m )
|
||||
:param display: automatically display statistics on every iteration (default True)
|
||||
:param bar_format: format the way statistics are displayed. Components to display are: elapsed, percentage, bar,
|
||||
fraction, rate and eta. These keywords are swapped out for the actual information. (default is
|
||||
"{elapsed} {percentage} {bar} {rate} {eta}")
|
||||
"""
|
||||
if end is None:
|
||||
self.start = 0
|
||||
self.end = start
|
||||
else:
|
||||
self.start = start
|
||||
self.end = end
|
||||
self.step = step
|
||||
self.length = length
|
||||
self.unit = unit
|
||||
self.color = color
|
||||
self.display = display
|
||||
self.bar_format = bar_format
|
||||
|
||||
def __iter__(self):
|
||||
"""
|
||||
initiate iterator which sets the starting point and gets the current time which is used for statistics
|
||||
:return: returns the new object
|
||||
"""
|
||||
self.start_time = time()
|
||||
self.current = self.start
|
||||
return self
|
||||
|
||||
def __next__(self):
|
||||
"""
|
||||
next overload. If display is true the latest stetistics are displayed
|
||||
:return: The next number in iterator
|
||||
"""
|
||||
if self.display:
|
||||
self.__restart_line()
|
||||
stdout.write(str(self))
|
||||
stdout.flush()
|
||||
if self.current >= self.end:
|
||||
raise StopIteration
|
||||
self.current += self.step
|
||||
return self.current - self.step
|
||||
|
||||
def __str__(self):
|
||||
"""
|
||||
displays the iterator as a string of statistics
|
||||
:return: formatted string
|
||||
"""
|
||||
return self.color + self.bar_format.format(bar=self.generate_bar(),
|
||||
elapsed=self.__time_format(self.elapsed()),
|
||||
eta=self.__time_format(self.estimated_time()),
|
||||
fraction=self.fraction(),
|
||||
percentage=(str(int(self.percentage() * 100)) + "%").rjust(4),
|
||||
rate=str(self.per_second()) + self.unit)
|
||||
|
||||
def elapsed(self):
|
||||
"""
|
||||
calculate the time that has elapsed
|
||||
:return: long elapsed time
|
||||
"""
|
||||
return time() - self.start_time
|
||||
|
||||
def estimated_time(self):
|
||||
"""
|
||||
Use the current percentage and elapsed time to determine an ETA
|
||||
:return: how much time is left
|
||||
"""
|
||||
try:
|
||||
return self.elapsed() / self.percentage() - self.elapsed()
|
||||
except ZeroDivisionError:
|
||||
return 0
|
||||
|
||||
def fraction(self):
|
||||
"""
|
||||
create a fraction representing the progress and the end of the iterator
|
||||
:return: string representing current/end of iterator
|
||||
"""
|
||||
return "%s/%d" % (str(self.current).rjust(len(str(self.end))), self.end)
|
||||
|
||||
def generate_bar(self):
|
||||
"""
|
||||
creates an ascii progressbar
|
||||
:return: string progressbar
|
||||
"""
|
||||
bar = "[{0}]".format(("=" * int(self.percentage() * self.length)).ljust(self.length))
|
||||
return bar
|
||||
|
||||
def per_second(self):
|
||||
"""
|
||||
use the current number of iterations and the amount of elapsed time to determine how many iterations per second
|
||||
:return:
|
||||
"""
|
||||
try:
|
||||
return round(self.current / self.step / self.elapsed(), 2)
|
||||
except ZeroDivisionError:
|
||||
return 0
|
||||
|
||||
def percentage(self):
|
||||
"""
|
||||
use current position / (end - start) to calculate percentage of completion
|
||||
:return: float of percentage to completion
|
||||
"""
|
||||
return self.current / (self.end - self.start)
|
||||
|
||||
@staticmethod
|
||||
def __restart_line():
|
||||
"""
|
||||
Writes return carriage to stdout and flushes. This allows writing to the same line.
|
||||
:return: None
|
||||
"""
|
||||
stdout.write('\r')
|
||||
stdout.flush()
|
||||
|
||||
@staticmethod
|
||||
def __time_format(time_to_format):
|
||||
"""
|
||||
formats time to mm:ss
|
||||
:param time_to_format: long to format
|
||||
:return: string of time
|
||||
"""
|
||||
m, s = divmod(time_to_format, 60)
|
||||
return "%02d:%02d" % (m, s)
|
1
ZProgressbar/__init__.py
Normal file
1
ZProgressbar/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from ZProgressbar.py import Progressbar
|
BIN
ZProgressbar/__pycache__/ZProgressbar.cpython-35.pyc
Normal file
BIN
ZProgressbar/__pycache__/ZProgressbar.cpython-35.pyc
Normal file
Binary file not shown.
BIN
dist/ZProgressbar-1.0.tar.gz
vendored
Normal file
BIN
dist/ZProgressbar-1.0.tar.gz
vendored
Normal file
Binary file not shown.
8
setup.py
8
setup.py
@ -1,13 +1,13 @@
|
||||
from distutils.core import setup
|
||||
setup(
|
||||
name = 'progressbar',
|
||||
packages = ['progressbar'],
|
||||
version = '1.0',
|
||||
name = 'ZProgressbar',
|
||||
packages = ['ZProgressbar'],
|
||||
version = '1.1',
|
||||
description = 'An iterator that can be displayed as an Ascii progress bar as well as display statistics like speed, progress and estimated time',
|
||||
author = 'Zak Timson',
|
||||
author_email = 'zaktimson@gmail.com',
|
||||
url = 'https://github.com/zaktimson/progressbar',
|
||||
download_url = 'https://github.com/zaktimson/progressbar/tarball/1.0',
|
||||
download_url = 'https://github.com/zaktimson/progressbar/tarball/1.1',
|
||||
keywords = ['iterator', 'progressbar', 'estimated time', 'timer'],
|
||||
classifiers = [],
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user