This repository has been archived by the owner on Dec 13, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
example.py
executable file
·130 lines (109 loc) · 3.98 KB
/
example.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/env python
"""Example implementation of all progress bars.
Usage:
example_colors.py progress_bar [-f] [--undefined]
example_colors.py progress_bar_bits [-f] [--undefined]
example_colors.py progress_bar_bytes [-f] [--undefined]
example_colors.py progress_bar_wget [-f] [--undefined]
example_colors.py progress_bar_yum [-f] [--undefined]
example_colors.py -h | --help
Options:
-f --fast Quickly run example (for testing).
-h --help Show this screen.
--undefined Show undefined progress bars instead.
"""
from __future__ import print_function
import locale
import os
import signal
import sys
import time
from docopt import docopt
from etaprogress.progress import ProgressBar, ProgressBarBits, ProgressBarBytes, ProgressBarWget, ProgressBarYum
OPTIONS = docopt(__doc__) if __name__ == '__main__' else dict()
def error(message, code=1):
"""Prints an error message to stderr and exits with a status of 1 by default."""
if message:
print('ERROR: {0}'.format(message), file=sys.stderr)
else:
print(file=sys.stderr)
sys.exit(code)
def progress_bar():
denominator = 5 if OPTIONS['--fast'] else 100
bar = ProgressBar(0 if OPTIONS['--undefined'] else denominator)
for i in range(denominator + 1):
bar.numerator = i
print(bar, end='\r')
sys.stdout.flush()
time.sleep(0.25)
bar.force_done = True # Needed in case of --undefined.
print(bar) # Always print one last time.
def progress_bar_bits():
denominator = 10 if OPTIONS['--fast'] else 100000000
bar = ProgressBarBits(0 if OPTIONS['--undefined'] else denominator)
for i in range(0, denominator + 1, 2 if OPTIONS['--fast'] else 1234567):
bar.numerator = i
print(bar, end='\r')
sys.stdout.flush()
time.sleep(0.25)
bar.numerator = denominator
bar.force_done = True
print(bar)
def progress_bar_bytes():
denominator = 10 if OPTIONS['--fast'] else 100000000
bar = ProgressBarBytes(0 if OPTIONS['--undefined'] else denominator)
for i in range(0, denominator + 1, 2 if OPTIONS['--fast'] else 1234567):
bar.numerator = i
print(bar, end='\r')
sys.stdout.flush()
time.sleep(0.25)
bar.numerator = denominator
bar.force_done = True
print(bar)
def progress_bar_wget():
denominator = 10 if OPTIONS['--fast'] else 100000000
bar = ProgressBarWget(0 if OPTIONS['--undefined'] else denominator)
for i in range(0, denominator + 1, 2 if OPTIONS['--fast'] else 1234567):
bar.numerator = i
print(bar, end='\r')
sys.stdout.flush()
time.sleep(0.25)
bar.numerator = denominator
bar.force_done = True
print(bar)
def progress_bar_yum():
files = {
'CentOS-7.0-1406-x86_64-DVD.iso': 10 if OPTIONS['--fast'] else 4148166656,
'CentOS-7.0-1406-x86_64-Everything.iso': 15 if OPTIONS['--fast'] else 7062159360,
'md5sum.txt': 5 if OPTIONS['--fast'] else 486,
}
for file_name, file_size in files.items():
bar = ProgressBarYum(0 if OPTIONS['--undefined'] else file_size, file_name)
for i in range(0, file_size + 1, 2 if OPTIONS['--fast'] else int(file_size / 100.0)):
bar.numerator = i
print(bar, end='\r')
sys.stdout.flush()
time.sleep(0.25)
bar.numerator = file_size
bar.force_done = True
print(bar)
def main():
if os.name == 'nt':
locale.setlocale(locale.LC_ALL, 'english-us')
else:
locale.resetlocale()
if OPTIONS['progress_bar']:
progress_bar()
elif OPTIONS['progress_bar_bits']:
progress_bar_bits()
elif OPTIONS['progress_bar_bytes']:
progress_bar_bytes()
elif OPTIONS['progress_bar_wget']:
progress_bar_wget()
elif OPTIONS['progress_bar_yum']:
progress_bar_yum()
else:
raise RuntimeError
if __name__ == '__main__':
signal.signal(signal.SIGINT, lambda *_: error('', 0)) # Properly handle Control+C
main()