aboutsummaryrefslogtreecommitdiff
path: root/src/argaze/utils/MiscFeatures.py
blob: 56a77bb5b9dc44d93910c132745a90de0533f398 (plain)
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
#!/usr/bin/env python

# Print iterations progress
def printProgressBar (iteration:int, total:int, prefix:str = '', suffix:str = '', decimals:int = 1, length:int = 100, fill:str = '█', printEnd:str = "\r"):
    """Print iterations progress.  
    Call in a loop to create terminal progress bar.  
    - current iteration  
    - total iterations  
    - prefix string  
    - suffix string  
    - positive number of decimals in percent complete  
    - character length of bar  
    - bar fill character  
    - end character (e.g. "\r", "\r\n")
    """
    percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
    filledLength = int(length * iteration // total)
    bar = fill * filledLength + '-' * (length - filledLength)
    print(f'\r{prefix} |{bar}| {percent}% {suffix}', end = printEnd)

    # Print New Line on Complete
    if iteration == total: 
        print()

# Handle exit event
class ExitSignalHandler():

    def __init__(self):

        import signal
        import threading

        global __exit_event
        global __on_exit_signal

        __exit_event = threading.Event()

        def __on_exit_signal(signo, _frame):
            __exit_event.set()

        for sig in ('TERM', 'HUP', 'INT'):
            signal.signal(getattr(signal, 'SIG'+sig), __on_exit_signal)

    def status(self):
        return __exit_event.is_set()