Added spinner
This commit is contained in:
		| @@ -1,4 +1,6 @@ | ||||
| import os | ||||
| import sys | ||||
| from collections import Callable | ||||
| from typing import Union, Optional | ||||
|  | ||||
| import pyfiglet | ||||
| @@ -7,6 +9,7 @@ from termcolor import colored | ||||
|  | ||||
| from cpl.console.background_color import BackgroundColor | ||||
| from cpl.console.foreground_color import ForegroundColor | ||||
| from cpl.console.spinner_thread import SpinnerThread | ||||
|  | ||||
|  | ||||
| class Console: | ||||
| @@ -203,3 +206,16 @@ class Console: | ||||
|         if not cls._is_first_write: | ||||
|             cls._output('', end='') | ||||
|         cls._output(string, x, y, end='') | ||||
|  | ||||
|     @classmethod | ||||
|     def spinner(cls, message: str, call: Callable): | ||||
|         cls.write(message) | ||||
|         spinner = SpinnerThread(cls) | ||||
|         spinner.start() | ||||
|         call() | ||||
|         spinner.stop_spinning() | ||||
|         cls.write_line() | ||||
|  | ||||
|     @classmethod | ||||
|     def flush(cls): | ||||
|         sys.stdout.flush() | ||||
|   | ||||
							
								
								
									
										31
									
								
								src/cpl/console/spinner_thread.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/cpl/console/spinner_thread.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| import threading | ||||
| import time | ||||
|  | ||||
|  | ||||
| class SpinnerThread(threading.Thread): | ||||
|  | ||||
|     def __init__(self, console): | ||||
|         threading.Thread.__init__(self) | ||||
|  | ||||
|         self._console = console | ||||
|         self._is_spinning = True | ||||
|  | ||||
|     @staticmethod | ||||
|     def _spinner(): | ||||
|         while True: | ||||
|             for cursor in '|/-\\': | ||||
|                 yield cursor | ||||
|  | ||||
|     def run(self) -> None: | ||||
|         spinner = self._spinner() | ||||
|         while self._is_spinning: | ||||
|             self._console.write(next(spinner)) | ||||
|             time.sleep(0.1) | ||||
|             self._console.write('\b') | ||||
|             self._console.flush() | ||||
|  | ||||
|         self._console.write(' ') | ||||
|  | ||||
|     def stop_spinning(self): | ||||
|         self._is_spinning = False | ||||
|         time.sleep(0.1) | ||||
		Reference in New Issue
	
	Block a user