mirror of https://github.com/borgbackup/borg.git
Add option for an explicit sign in sizeof_fmt functions in helpers
This commit is contained in:
parent
db171e998e
commit
c405122753
|
@ -619,29 +619,33 @@ def format_timedelta(td):
|
||||||
return txt
|
return txt
|
||||||
|
|
||||||
|
|
||||||
def format_file_size(v, precision=2):
|
def format_file_size(v, precision=2, sign=False):
|
||||||
"""Format file size into a human friendly format
|
"""Format file size into a human friendly format
|
||||||
"""
|
"""
|
||||||
return sizeof_fmt_decimal(v, suffix='B', sep=' ', precision=precision)
|
return sizeof_fmt_decimal(v, suffix='B', sep=' ', precision=precision, sign=sign)
|
||||||
|
|
||||||
|
|
||||||
def sizeof_fmt(num, suffix='B', units=None, power=None, sep='', precision=2):
|
def sizeof_fmt(num, suffix='B', units=None, power=None, sep='', precision=2, sign=False):
|
||||||
|
prefix = '+' if sign and num > 0 else ''
|
||||||
|
|
||||||
for unit in units[:-1]:
|
for unit in units[:-1]:
|
||||||
if abs(round(num, precision)) < power:
|
if abs(round(num, precision)) < power:
|
||||||
if isinstance(num, int):
|
if isinstance(num, int):
|
||||||
return "{}{}{}{}".format(num, sep, unit, suffix)
|
return "{}{}{}{}{}".format(prefix, num, sep, unit, suffix)
|
||||||
else:
|
else:
|
||||||
return "{:3.{}f}{}{}{}".format(num, precision, sep, unit, suffix)
|
return "{}{:3.{}f}{}{}{}".format(prefix, num, precision, sep, unit, suffix)
|
||||||
num /= float(power)
|
num /= float(power)
|
||||||
return "{:.{}f}{}{}{}".format(num, precision, sep, units[-1], suffix)
|
return "{}{:.{}f}{}{}{}".format(prefix, num, precision, sep, units[-1], suffix)
|
||||||
|
|
||||||
|
|
||||||
def sizeof_fmt_iec(num, suffix='B', sep='', precision=2):
|
def sizeof_fmt_iec(num, suffix='B', sep='', precision=2, sign=False):
|
||||||
return sizeof_fmt(num, suffix=suffix, sep=sep, precision=precision, units=['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'], power=1024)
|
return sizeof_fmt(num, suffix=suffix, sep=sep, precision=precision, sign=sign,
|
||||||
|
units=['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'], power=1024)
|
||||||
|
|
||||||
|
|
||||||
def sizeof_fmt_decimal(num, suffix='B', sep='', precision=2):
|
def sizeof_fmt_decimal(num, suffix='B', sep='', precision=2, sign=False):
|
||||||
return sizeof_fmt(num, suffix=suffix, sep=sep, precision=precision, units=['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'], power=1000)
|
return sizeof_fmt(num, suffix=suffix, sep=sep, precision=precision, sign=sign,
|
||||||
|
units=['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'], power=1000)
|
||||||
|
|
||||||
|
|
||||||
def format_archive(archive):
|
def format_archive(archive):
|
||||||
|
|
|
@ -692,6 +692,8 @@ def test_file_size():
|
||||||
10**18: '1.00 EB', # exabytes
|
10**18: '1.00 EB', # exabytes
|
||||||
10**21: '1.00 ZB', # zottabytes
|
10**21: '1.00 ZB', # zottabytes
|
||||||
10**24: '1.00 YB', # yottabytes
|
10**24: '1.00 YB', # yottabytes
|
||||||
|
-1: '-1 B', # negative value
|
||||||
|
-1010: '-1.01 kB', # negative value with rounding
|
||||||
}
|
}
|
||||||
for size, fmt in si_size_map.items():
|
for size, fmt in si_size_map.items():
|
||||||
assert format_file_size(size) == fmt
|
assert format_file_size(size) == fmt
|
||||||
|
@ -703,6 +705,18 @@ def test_file_size_precision():
|
||||||
assert format_file_size(999990000, precision=1) == '1.0 GB' # and not 999.9 MB or 1000.0 MB
|
assert format_file_size(999990000, precision=1) == '1.0 GB' # and not 999.9 MB or 1000.0 MB
|
||||||
|
|
||||||
|
|
||||||
|
def test_file_size_sign():
|
||||||
|
si_size_map = {
|
||||||
|
0: '0 B',
|
||||||
|
1: '+1 B',
|
||||||
|
1234: '+1.23 kB',
|
||||||
|
-1: '-1 B',
|
||||||
|
-1234: '-1.23 kB',
|
||||||
|
}
|
||||||
|
for size, fmt in si_size_map.items():
|
||||||
|
assert format_file_size(size, sign=True) == fmt
|
||||||
|
|
||||||
|
|
||||||
def test_is_slow_msgpack():
|
def test_is_slow_msgpack():
|
||||||
saved_packer = msgpack.Packer
|
saved_packer = msgpack.Packer
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue