Unify and make symmetric pretty_size and parse_size

This commit is contained in:
Aldo Cortesi 2016-05-31 19:45:48 +12:00
parent b2f63458fc
commit f62efed304
2 changed files with 24 additions and 21 deletions

View File

@ -1,26 +1,25 @@
SIZE_UNITS = dict(
b=1024 ** 0, SIZE_TABLE = [
k=1024 ** 1, ("b", 1024 ** 0),
m=1024 ** 2, ("k", 1024 ** 1),
g=1024 ** 3, ("m", 1024 ** 2),
t=1024 ** 4, ("g", 1024 ** 3),
) ("t", 1024 ** 4),
]
SIZE_UNITS = dict(SIZE_TABLE)
def pretty_size(size): def pretty_size(size):
suffixes = [ for bottom, top in zip(SIZE_TABLE, SIZE_TABLE[1:]):
("B", 2 ** 10), if bottom[1] <= size < top[1]:
("kB", 2 ** 20), suf = bottom[0]
("MB", 2 ** 30), lim = bottom[1]
] x = round(size / lim, 2)
for suf, lim in suffixes:
if size >= lim:
continue
else:
x = round(size / float(lim / 2 ** 10), 2)
if x == int(x): if x == int(x):
x = int(x) x = int(x)
return str(x) + suf return str(x) + suf
return "%s%s"%(size, SIZE_TABLE[0][0])
def parse_size(s): def parse_size(s):

View File

@ -1,6 +1,8 @@
from netlib import human, tutils from netlib import human, tutils
def test_parse_size(): def test_parse_size():
assert human.parse_size("0") == 0
assert human.parse_size("0b") == 0
assert human.parse_size("1") == 1 assert human.parse_size("1") == 1
assert human.parse_size("1k") == 1024 assert human.parse_size("1k") == 1024
assert human.parse_size("1m") == 1024**2 assert human.parse_size("1m") == 1024**2
@ -10,10 +12,12 @@ def test_parse_size():
def test_pretty_size(): def test_pretty_size():
assert human.pretty_size(100) == "100B" assert human.pretty_size(0) == "0b"
assert human.pretty_size(1024) == "1kB" assert human.pretty_size(100) == "100b"
assert human.pretty_size(1024 + (1024 / 2.0)) == "1.5kB" assert human.pretty_size(1024) == "1k"
assert human.pretty_size(1024 * 1024) == "1MB" assert human.pretty_size(1024 + (1024 / 2.0)) == "1.5k"
assert human.pretty_size(1024 * 1024) == "1m"
assert human.pretty_size(10 * 1024 * 1024) == "10m"
def test_pretty_duration(): def test_pretty_duration():