Updated library files & readme
This commit is contained in:
parent
7b34982745
commit
ff0631a790
4
MANIFEST
4
MANIFEST
@ -1,4 +0,0 @@
|
|||||||
# file GENERATED by distutils, do NOT edit
|
|
||||||
setup.py
|
|
||||||
ZProgressbar/ZProgressbar.py
|
|
||||||
ZProgressbar/__init__.py
|
|
184
README.md
184
README.md
@ -1,107 +1,121 @@
|
|||||||
# progressbar
|
<!-- Header -->
|
||||||
|
<div id="top" align="center">
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<!-- Logo -->
|
||||||
|
<img src="https://git.zakscode.com/repo-avatars/002f97340c2781ccfa5d09fde97403fd499c39a9ad5675dc0edf05a8396e9ac5" alt="Logo" width="200" height="200">
|
||||||
|
|
||||||
|
<!-- Title -->
|
||||||
|
### py-bar
|
||||||
|
|
||||||
|
<!-- Description -->
|
||||||
|
Python ASCII Progress Bar
|
||||||
|
|
||||||
|
<!-- Repo badges -->
|
||||||
|
[](https://git.zakscode.com/ztimson/py-bar/tags)
|
||||||
|
[](https://git.zakscode.com/ztimson/py-bar/pulls)
|
||||||
|
[](https://git.zakscode.com/ztimson/py-bar/issues)
|
||||||
|
|
||||||
|
<!-- Links -->
|
||||||
|
|
||||||
|
---
|
||||||
|
<div>
|
||||||
|
<a href="https://git.zakscode.com/ztimson/py-bar/releases" target="_blank">Release Notes</a>
|
||||||
|
• <a href="https://git.zakscode.com/ztimson/py-bar/issues/new?template=.github%2fissue_template%2fbug.md" target="_blank">Report a Bug</a>
|
||||||
|
• <a href="https://git.zakscode.com/ztimson/py-bar/issues/new?template=.github%2fissue_template%2fenhancement.md" target="_blank">Request a Feature</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
---
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
- [py-bar](#top)
|
||||||
|
- [About](#about)
|
||||||
|
- [Built With](#built-with)
|
||||||
|
- [Setup](#setup)
|
||||||
|
- [Production](#production)
|
||||||
|
- [Documentation](#documentation)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
Python CLI Progress bar. This module is an iterator that can not only, iterate, but display its self as a progressbar along with some other usefull iformation such as iterations a second, estimated time, elapsed time, etc.
|
Python CLI Progress bar. This module is an iterator that can not only, iterate, but display its self as a progressbar along with some other usefull iformation such as iterations a second, estimated time, elapsed time, etc.
|
||||||
|
|
||||||
`00:25 100% [====================] [100/100] 3.99/s 00:00`
|
`00:25 100% [====================] [100/100] 3.99/s 00:00`
|
||||||
|
|
||||||
### Authors
|
### Built With
|
||||||
* [Zak Timson](http://zakscode.com)
|
[](https://www.python.org/)
|
||||||
|
|
||||||
### License
|
## Setup
|
||||||
GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007. read LICENSE for more
|
|
||||||
|
|
||||||
### Install
|
<details>
|
||||||
Copy the script to your project and import it with:
|
<summary>
|
||||||
|
<h3 id="production" style="display: inline">
|
||||||
|
Production
|
||||||
|
</h3>
|
||||||
|
</summary>
|
||||||
|
|
||||||
`import progressbar`
|
#### Prerequisites
|
||||||
|
- [Python](https://www.python.org/downloads/)
|
||||||
|
|
||||||
or
|
#### Instructions
|
||||||
|
1. Download and add script to project: `curl https://git.zakscode.com/ztimson/py-bar/raw/branch/develop/progressbar.py`
|
||||||
|
2. Use in python script:
|
||||||
|
|
||||||
`from progressbar import Progressbar`
|
```python
|
||||||
|
from progressbar import Progressbar
|
||||||
|
|
||||||
### Quick Start
|
for i in Progressbar(100):
|
||||||
Use in a forloop:
|
...
|
||||||
|
|
||||||
`for i in Progressbar(100)`
|
# OR
|
||||||
|
|
||||||
Dont like it auto writing to the stdout? Do it your self.
|
progress = Progressbar(100, display=False) # Output manually
|
||||||
|
|
||||||
```
|
|
||||||
progress = Progressbar(100, display=False) # display false stops the auto writing
|
|
||||||
for i in progress:
|
for i in progress:
|
||||||
print(str(progress)) # using the to string will maunually write it
|
print(str(progress)) # Print progress bar
|
||||||
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
Maybe you dont want to use it as an iterable and you just want a progressbar. You can manually control its progress. Example, you want to view download progress:
|
</details>
|
||||||
|
|
||||||
```
|
## Documentation
|
||||||
progress = Progressbar(download_size, unit=" MB/s") # create the object
|
|
||||||
|
|
||||||
...
|
### Progressbar
|
||||||
|
|
||||||
progress.__iter__() # This will start the clock and initiate the iterable
|
#### Constructor Arguments
|
||||||
|
| Name | Description |
|
||||||
|
|------------|---------------------------------------------|
|
||||||
|
| start | Iterator starting position |
|
||||||
|
| end | Iterator ending position |
|
||||||
|
| current | Current iteration position |
|
||||||
|
| step | Added to current index after each iteration |
|
||||||
|
| length | ASCII progress bar string length |
|
||||||
|
| units | Unit to append to progress rate |
|
||||||
|
| color | ANSI escape code to color progress bar |
|
||||||
|
| display | Automatically output to sdtout |
|
||||||
|
| bar_format | Custom progress bar format string |
|
||||||
|
|
||||||
...
|
#### Properties
|
||||||
|
| Name | Description |
|
||||||
|
|------------|----------------------------------------------------|
|
||||||
|
| elapsed | Time ellapsed since first iteration: mm:ss |
|
||||||
|
| percentage | Percentage of completion: 50% |
|
||||||
|
| bar | ASCII progress bar: \|==========\| |
|
||||||
|
| fraction | Position as a fraction: \[index/total\] |
|
||||||
|
| rate | Iterations per second: 2.00/s |
|
||||||
|
| eta | Estimated time until complete: mm:ss |
|
||||||
|
|
||||||
progress.current = 220 # set the curent progress ex. 200/1000 Mb downloaded
|
#### Methods
|
||||||
download_speed = progress.rate() # get any sort of stistics you may want, the download rate for exmple
|
| Name | Description |
|
||||||
print(progress) # display progress bar. Manually iterating the object it will not display automaticly
|
|----------------------|----------------------------------------------|
|
||||||
```
|
| elapsed(self) | Elapsed time in seconds |
|
||||||
|
| estimated_time(self) | Estimated time until completion in seconds |
|
||||||
|
| fraction(self) | Create fraction string |
|
||||||
|
| generate_bar | Progress bar ASCII string |
|
||||||
|
| per_second | Calculate iteration rate per second as float |
|
||||||
|
| percentage | Percentage as a floating point |
|
||||||
|
|
||||||
This would print (Underscores to maintain spacing):
|
## License
|
||||||
|
Copyright © 2023 Zakary Timson | Available under the GNU General Public License
|
||||||
|
|
||||||
`00:53 20% [====________________] [ 200/1000] 3.75 Mb/s 03:32`
|
See the [license](./LICENSE) for more information.
|
||||||
|
|
||||||
### API
|
|
||||||
**Class: Progressbar**
|
|
||||||
|
|
||||||
**Attributes**
|
|
||||||
|
|
||||||
start - iterator starting position
|
|
||||||
|
|
||||||
end - iterator ending position
|
|
||||||
|
|
||||||
current - curent iteration
|
|
||||||
|
|
||||||
step - number to be added to current each iteraton
|
|
||||||
|
|
||||||
length - length of characters in the progress bar
|
|
||||||
|
|
||||||
units - unit to append to rate
|
|
||||||
|
|
||||||
color - ANSI escape code to change color of text
|
|
||||||
|
|
||||||
display - automaticly display the to string with each iteration
|
|
||||||
|
|
||||||
bar_format - string which dictates how things are displayed ex "{elapesed} - {eta}" could look like: 00:00 - 00:10. See the statistics portion to see what can be displayed
|
|
||||||
|
|
||||||
**Available Statistics**
|
|
||||||
|
|
||||||
elapsed - running time of iterator. displayed as: mm:ss
|
|
||||||
|
|
||||||
percentage - percentage of completion. displayed as: 100%
|
|
||||||
|
|
||||||
bar - the progress bar. displayed as: |==========|
|
|
||||||
|
|
||||||
fraction - current / end. displayed as: [100/100]
|
|
||||||
|
|
||||||
rate - iterations per second. displayed as: 2.00/s (unit can be changed, see units attribute)
|
|
||||||
|
|
||||||
eta - estimated time until completion. displayed as: mm:ss
|
|
||||||
|
|
||||||
**Methods**
|
|
||||||
|
|
||||||
elapsed(self) - running time of iterator
|
|
||||||
|
|
||||||
estimated_time(self) - estimated time until iterator completes
|
|
||||||
|
|
||||||
fraction(self) - create string representing the fraction, complete over total
|
|
||||||
|
|
||||||
generate_bar - generates the progress bar and returns string
|
|
||||||
|
|
||||||
per_second - calculates the rate or speed of iterations per second
|
|
||||||
|
|
||||||
percentage - floating point of completion
|
|
||||||
|
|
||||||
### Bug Reporting
|
|
||||||
|
|
||||||
Please submit bugs to the github [issue tracker](https://github.com/zaktimson/progressbar/issues)
|
|
||||||
|
@ -1,140 +0,0 @@
|
|||||||
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 +0,0 @@
|
|||||||
from ZProgressbar import ZProgressbar
|
|
BIN
dist/ZProgressbar-1.0.tar.gz
vendored
BIN
dist/ZProgressbar-1.0.tar.gz
vendored
Binary file not shown.
BIN
dist/ZProgressbar-1.1.tar.gz
vendored
BIN
dist/ZProgressbar-1.1.tar.gz
vendored
Binary file not shown.
13
setup.py
13
setup.py
@ -1,13 +0,0 @@
|
|||||||
from distutils.core import setup
|
|
||||||
setup(
|
|
||||||
name = 'ZProgressbar',
|
|
||||||
packages = ['ZProgressbar'],
|
|
||||||
version = '1.2',
|
|
||||||
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.2',
|
|
||||||
keywords = ['iterator', 'progressbar', 'estimated time', 'timer'],
|
|
||||||
classifiers = [],
|
|
||||||
)
|
|
Loading…
x
Reference in New Issue
Block a user