From 25e98b57b327984ff578fe9b6754f439c80b530e Mon Sep 17 00:00:00 2001 From: Sebastien Luttringer <sebastien.luttringer@smartjog.com> Date: Tue, 15 Nov 2011 13:22:36 +0100 Subject: [PATCH] improve human_size computation --- installsystems/tools.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/installsystems/tools.py b/installsystems/tools.py index 36b5357..5394a0d 100644 --- a/installsystems/tools.py +++ b/installsystems/tools.py @@ -12,6 +12,7 @@ import hashlib import shutil import urllib2 import time +import math from subprocess import call, check_call, CalledProcessError @@ -324,15 +325,17 @@ def getsize(path): total_sz += filestat.st_size return total_sz -def human_size(num): +def human_size(num, unit='B'): ''' Return human readable size ''' - for x in ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']: - if num < 1024.0: - return "%3.1f%s" % (num, x) - num /= 1024.0 - return "%3.1f%s" % (num, x) + prefixes = ('','Ki', 'Mi', 'Gi', 'Ti','Pi', 'Ei', 'Zi', 'Yi') + power = int(math.log(num, 1024)) + # max is YiB + if power >= len(prefixes): + power = len(prefixes) - 1 + scaled = num / float(1024 ** power) + return "%3.1f%s%s" % (scaled, prefixes[power], unit) def guess_distro(path): ''' -- GitLab