X-Git-Url: https://code.grnet.gr/git/snf-image-creator/blobdiff_plain/6152a5592cfadb062af05dd48c6e8f204ff001b6..4a2fd05c4fad9b757ad1ae2df973ddc790a6921e:/image_creator/util.py diff --git a/image_creator/util.py b/image_creator/util.py index 718b819..d3d4cc0 100644 --- a/image_creator/util.py +++ b/image_creator/util.py @@ -34,7 +34,8 @@ import sys import pbs import hashlib -from clint.textui import colored, progress as uiprogress +from colors import red, green, yellow +from progress.bar import Bar class FatalError(Exception): @@ -60,19 +61,19 @@ def get_command(command): def error(msg, new_line=True): nl = "\n" if new_line else '' - sys.stderr.write(colored.red('Error: %s' % msg) + nl) + sys.stderr.write(red('Error: %s' % msg) + nl) def warn(msg, new_line=True): if not silent: nl = "\n" if new_line else '' - sys.stderr.write(colored.yellow("Warning: %s" % msg) + nl) + sys.stderr.write(yellow("Warning: %s" % msg) + nl) def success(msg, new_line=True): if not silent: nl = "\n" if new_line else '' - sys.stdout.write(colored.green(msg) + nl) + sys.stdout.write(green(msg) + nl) if not nl: sys.stdout.flush() @@ -85,26 +86,34 @@ def output(msg="", new_line=True): sys.stdout.flush() -def progress(message=''): +def progress(message='', bar_type="default"): - PROGRESS_LENGTH = 32 - MESSAGE_LENGTH = 32 + MESSAGE_LENGTH = 30 - def progress_generator(n=100): - position = 0 - msg = message.ljust(MESSAGE_LENGTH) - for i in uiprogress.bar(range(n), msg, PROGRESS_LENGTH, silent): - if i < position: - continue - position = yield - yield # suppress the StopIteration exception - return progress_generator + suffix = { + 'default': '%(index)d/%(max)d', + 'percent': '%(percent)d%%', + 'b': '%(index)d/%(max)d B', + 'kb': '%(index)d/%(max)d KB', + 'mb': '%(index)d/%(max)d MB' + } + bar = Bar() + bar.message = message.ljust(MESSAGE_LENGTH) + bar.fill = '#' + bar.suffix = suffix[bar_type] + bar.bar_prefix = ' [' + bar.bar_suffix = '] ' -def md5(filename, size, progress=None): + return bar - BLOCKSIZE = 2 ^ 22 # 4MB +def md5(filename, size): + + BLOCKSIZE = 2 ** 22 # 4MB + + progressbar = progress("Calculating md5sum:", 'mb') + progressbar.max = ((size + 2 ** 20 - 1) // (2 ** 20)) md5 = hashlib.md5() with open(filename, "r") as src: left = size @@ -113,7 +122,12 @@ def md5(filename, size, progress=None): data = src.read(length) md5.update(data) left -= length + progressbar.goto((size - left) // (2 ** 20)) + + checksum = md5.hexdigest() + output("\rCalculating md5sum...\033[K", False) + success(checksum) - return md5.hexdigest() + return checksum # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :