Skip to content
Snippets Groups Projects
Commit cbc4ffa6 authored by Alan De Smet's avatar Alan De Smet
Browse files

Better byte count formatting

parent bb5b5645
Branches
No related tags found
No related merge requests found
......@@ -96,21 +96,45 @@ class FileSet:
def human_bytes(total_bytes):
""" return nicely formatted string for a count of bytes
The result is rounded to the displayed precision,
so (1024**2)-512 is "1.00 MiB" but (1024**2)-513 is "1023 KiB"
>>> human_bytes(0)
'0 B'
>>> human_bytes(3836163)
'3.66 MiB'
>>> human_bytes((1024**2)-512)
'1.00 MiB'
>>> human_bytes((1024**2)-513)
'1023 KiB'
>>> human_bytes(7763153400)
'7.23 GiB'
"""
step_size = 1024
# Yes, it's "Ki", not "ki".
steps = "Ki Mi Gi Ti Pi Ei".split()
# If you prefer the non-binary SI prefixes
# step_size = 1000
# steps = [""]+list("kMGTPE")
# steps = "kMGTPE"
if total_bytes < step_size:
return f"{total_bytes} B"
value = total_bytes
step = -1
while value >= step_size:
while round(value,0) >= step_size:
step += 1
value /= step_size
value_str = f"{value:f}"[:4]
if value_str[-1] == ".":
value_str = value_str[:-1]
if round(value, 2) < 10:
value = round(value, 2)
value_str = f"{value:.2f}"
elif round(value, 1) < 100:
value = round(value, 1)
value_str = f"{value:.1f}"
else:
value = round(value, 0)
value_str = f"{value:.0f}"
return f"{value_str} {steps[step]}B"
......@@ -145,7 +169,7 @@ class DownloadStatistics:
self.finish()
speed = self.downloaded_size/(self.total_time().total_seconds())
if speed < 100:
speed_str = "{speed} B"
speed_str = f"{speed} B"
else:
speed_str = human_bytes(speed)
ret = [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment