Compare commits
	
		
			6 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ce731d6af9 | |||
| e67165276e | |||
| 10e8e61306 | |||
| ff0631a790 | |||
| 7b34982745 | |||
| 
						 | 
					f4089bfe60 | 
							
								
								
									
										4
									
								
								MANIFEST
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								MANIFEST
									
									
									
									
									
								
							@@ -1,4 +0,0 @@
 | 
				
			|||||||
# file GENERATED by distutils, do NOT edit
 | 
					 | 
				
			||||||
setup.py
 | 
					 | 
				
			||||||
ZProgressbar/ZProgressbar.py
 | 
					 | 
				
			||||||
ZProgressbar/__init__.py
 | 
					 | 
				
			||||||
							
								
								
									
										181
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								README.md
									
									
									
									
									
								
							@@ -1,104 +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)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
eat - 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.py import Progressbar
 | 
					 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								dist/ZProgressbar-1.0.tar.gz
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								dist/ZProgressbar-1.0.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.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.1',
 | 
					 | 
				
			||||||
  keywords = ['iterator', 'progressbar', 'estimated time', 'timer'],
 | 
					 | 
				
			||||||
  classifiers = [],
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user