Skip to content

Commit 019cf1e

Browse files
author
Yoav Ram
committed
first version, copied from pallets/click#649
0 parents  commit 019cf1e

File tree

10 files changed

+2416
-0
lines changed

10 files changed

+2416
-0
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
click_spinner/_version.py export-subst

.gitignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.idea
2+
.DS_Store
3+
*.pyc
4+
*.pyo
5+
*.egg-ignore
6+
*.egg-info
7+
dist
8+
build
9+
docs/_build
10+
click.egg-info
11+
.tox

MANIFEST.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include versioneer.py
2+
include click_spinner/_version.py

README.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Click Spinner
2+
3+
Sometimes you would just like to show the user some progress,
4+
but a progress bar is not suitable because you don’t know how much longer it would take.
5+
In these cases you might want to display a simple spinner using the `spinner()` function.
6+
7+
Example usage:
8+
9+
```py
10+
with click_spinner.spinner():
11+
do_something()
12+
do_something_else()
13+
```
14+
15+
It looks like this:
16+
17+
![spinner](https://cloud.githubusercontent.com/assets/1288133/18229827/29629cd4-728f-11e6-8007-6c85ac50565c.gif)
18+
19+
Spinner class based on on a [gist by @cevaris](https://gist.github.com/cevaris/79700649f0543584009e).
20+
21+
Introduced in [PR #649](https://github.com/pallets/click/pull/649).
22+
23+
## Install
24+
25+
```
26+
pip install click-spinner
27+
```
28+
29+
## Authors
30+
31+
- Yoav Ram (@yoavram)

click_spinner/__init__.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from builtins import next
2+
from builtins import object
3+
import sys
4+
import threading
5+
import time
6+
import itertools
7+
8+
9+
class Spinner(object):
10+
spinner_cycle = itertools.cycle(['-', '/', '|', '\\'])
11+
12+
def __init__(self):
13+
self.stop_running = threading.Event()
14+
self.spin_thread = threading.Thread(target=self.init_spin)
15+
16+
def start(self):
17+
self.spin_thread.start()
18+
19+
def stop(self):
20+
self.stop_running.set()
21+
self.spin_thread.join()
22+
23+
def init_spin(self):
24+
while not self.stop_running.is_set():
25+
sys.stdout.write(next(self.spinner_cycle))
26+
sys.stdout.flush()
27+
time.sleep(0.25)
28+
sys.stdout.write('\b')
29+
30+
def __enter__(self):
31+
self.start()
32+
33+
def __exit__(self, exc_type, exc_val, exc_tb):
34+
self.stop()
35+
36+
37+
def spinner():
38+
"""This function creates a context manager that is used to display a
39+
spinner as long as the context has not exited.
40+
41+
Example usage::
42+
43+
with spinner():
44+
do_something()
45+
do_something_else()
46+
47+
"""
48+
return Spinner()
49+
50+
51+
from ._version import get_versions
52+
__version__ = get_versions()['version']
53+
del get_versions

0 commit comments

Comments
 (0)