2017-08-18 12:12:25 +02:00
|
|
|
import shutil
|
|
|
|
import sys
|
|
|
|
|
2018-08-02 17:38:10 +02:00
|
|
|
from . import logger
|
2017-08-18 12:12:25 +02:00
|
|
|
|
2018-08-02 17:38:10 +02:00
|
|
|
class DefaultProgressProvider:
|
|
|
|
"""
|
|
|
|
Default progress provider implementation, which draws progress
|
|
|
|
bar in the console, unless current logging is set to evrbose mode.
|
|
|
|
"""
|
|
|
|
def progress(self, count, total, prefix="", suffix=""):
|
|
|
|
if logger.VERBOSE:
|
|
|
|
return
|
2017-08-18 12:12:25 +02:00
|
|
|
|
2018-08-02 17:38:10 +02:00
|
|
|
size = shutil.get_terminal_size((80, 20))
|
|
|
|
|
|
|
|
if prefix != "":
|
|
|
|
prefix = prefix + " "
|
|
|
|
if suffix != "":
|
|
|
|
suffix = " " + suffix
|
|
|
|
|
|
|
|
bar_len = size.columns - len(prefix) - len(suffix) - 10
|
|
|
|
filled_len = int(round(bar_len * count / float(total)))
|
|
|
|
|
|
|
|
percents = round(100.0 * count / float(total), 1)
|
|
|
|
bar = '=' * filled_len + '-' * (bar_len - filled_len)
|
|
|
|
|
|
|
|
sys.stdout.write('%s[%s] %s%%%s\r' % (prefix, bar, percents, suffix))
|
|
|
|
sys.stdout.flush()
|
|
|
|
|
|
|
|
def clear(self):
|
|
|
|
if logger.VERBOSE:
|
|
|
|
return
|
2017-08-18 12:12:25 +02:00
|
|
|
|
2018-08-02 17:38:10 +02:00
|
|
|
size = shutil.get_terminal_size((80, 20))
|
|
|
|
sys.stdout.write(" " * size.columns + "\r")
|
|
|
|
sys.stdout.flush()
|
2017-08-18 12:12:25 +02:00
|
|
|
|
2018-08-02 17:38:10 +02:00
|
|
|
def step(self, step_name):
|
|
|
|
pass
|
2017-08-18 12:12:25 +02:00
|
|
|
|
|
|
|
|
2018-08-02 17:38:10 +02:00
|
|
|
PROGRESS_PROVIDER = DefaultProgressProvider()
|
2017-08-18 12:12:25 +02:00
|
|
|
|
2018-08-02 17:38:10 +02:00
|
|
|
|
|
|
|
def progress(count, total, prefix="", suffix=""):
|
|
|
|
"""
|
|
|
|
Report new progress status of the current task.
|
|
|
|
"""
|
|
|
|
PROGRESS_PROVIDER.progress(count, total, prefix, suffix)
|
2017-08-18 12:12:25 +02:00
|
|
|
|
|
|
|
|
|
|
|
def progressClear():
|
2018-08-02 17:38:10 +02:00
|
|
|
"""
|
|
|
|
Clear all possible progress bar lines in the ocnsole.
|
|
|
|
"""
|
|
|
|
PROGRESS_PROVIDER.clear()
|
|
|
|
|
|
|
|
def step(step_name):
|
|
|
|
PROGRESS_PROVIDER.step(step_name)
|
|
|
|
|
|
|
|
|
|
|
|
def setProvider(provider):
|
|
|
|
"""
|
|
|
|
Override progress provider with a given name.
|
|
|
|
Is used by glue logic to hijack progress and do smart things.
|
|
|
|
"""
|
|
|
|
global PROGRESS_PROVIDER
|
|
|
|
PROGRESS_PROVIDER = provider
|
|
|
|
|
2017-08-18 12:12:25 +02:00
|
|
|
|
2018-08-02 17:38:10 +02:00
|
|
|
def restoreDefaultProvider():
|
|
|
|
"""
|
|
|
|
Restore default progress provider.
|
|
|
|
"""
|
|
|
|
global PROGRESS_PROVIDER
|
|
|
|
PROGRESS_PROVIDER = DefaultProgressProvider()
|