|
|
|
@ -1316,6 +1316,17 @@ def format_bytes(bytes):
|
|
|
|
|
return '%.2f%s' % (converted, suffix)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def lookup_unit_table(unit_table, s):
|
|
|
|
|
units_re = '|'.join(re.escape(u) for u in unit_table)
|
|
|
|
|
m = re.match(
|
|
|
|
|
r'(?P<num>[0-9]+(?:[,.][0-9]*)?)\s*(?P<unit>%s)' % units_re, s)
|
|
|
|
|
if not m:
|
|
|
|
|
return None
|
|
|
|
|
num_str = m.group('num').replace(',', '.')
|
|
|
|
|
mult = unit_table[m.group('unit')]
|
|
|
|
|
return int(float(num_str) * mult)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse_filesize(s):
|
|
|
|
|
if s is None:
|
|
|
|
|
return None
|
|
|
|
@ -1359,16 +1370,28 @@ def parse_filesize(s):
|
|
|
|
|
'Yb': 1000 ** 8,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
units_re = '|'.join(re.escape(u) for u in _UNIT_TABLE)
|
|
|
|
|
m = re.match(
|
|
|
|
|
r'(?P<num>[0-9]+(?:[,.][0-9]*)?)\s*(?P<unit>%s)' % units_re, s)
|
|
|
|
|
if not m:
|
|
|
|
|
return lookup_unit_table(_UNIT_TABLE, s)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse_count(s):
|
|
|
|
|
if s is None:
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
num_str = m.group('num').replace(',', '.')
|
|
|
|
|
mult = _UNIT_TABLE[m.group('unit')]
|
|
|
|
|
return int(float(num_str) * mult)
|
|
|
|
|
s = s.strip()
|
|
|
|
|
|
|
|
|
|
if re.match(r'^[\d,.]+$', s):
|
|
|
|
|
return str_to_int(s)
|
|
|
|
|
|
|
|
|
|
_UNIT_TABLE = {
|
|
|
|
|
'k': 1000,
|
|
|
|
|
'K': 1000,
|
|
|
|
|
'm': 1000 ** 2,
|
|
|
|
|
'M': 1000 ** 2,
|
|
|
|
|
'kk': 1000 ** 2,
|
|
|
|
|
'KK': 1000 ** 2,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return lookup_unit_table(_UNIT_TABLE, s)
|
|
|
|
|
|
|
|
|
|
def month_by_name(name):
|
|
|
|
|
""" Return the number of a month by (locale-independently) English name """
|
|
|
|
|