borg-web/borgweb/borg/utility/data.py

25 lines
745 B
Python

from math import floor, log
bytes_in_unit = 1024 # Kibibyte
units = ("B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB", "HiB")
# bytes_in_unit = 1000 # Kilobyte
# units = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB", "HB")
def convert_bytes(c_bytes: int, unit: str = None) -> (float, str):
if c_bytes == 0:
return 0, units[0] if unit is None else unit
if unit is None:
index = int(floor(log(c_bytes, bytes_in_unit)))
else:
index = units.index(unit)
result = round(c_bytes / pow(bytes_in_unit, index), 2)
return result, units[index]
def bytes_to_string(c_bytes: int, unit: str = None) -> str:
n_bytes, unit = convert_bytes(c_bytes, unit)
return f"{n_bytes} {unit}"