|
|
@ -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 """ |
|
|
|