Convert memory size strings ('12 GB' etc.) to float
(size_str)
| 2436 | |
| 2437 | |
| 2438 | def _parse_size(size_str): |
| 2439 | """Convert memory size strings ('12 GB' etc.) to float""" |
| 2440 | suffixes = {'': 1, 'b': 1, |
| 2441 | 'k': 1000, 'm': 1000**2, 'g': 1000**3, 't': 1000**4, |
| 2442 | 'kb': 1000, 'mb': 1000**2, 'gb': 1000**3, 'tb': 1000**4, |
| 2443 | 'kib': 1024, 'mib': 1024**2, 'gib': 1024**3, 'tib': 1024**4} |
| 2444 | |
| 2445 | size_re = re.compile(r'^\s*(\d+|\d+\.\d+)\s*({0})\s*$'.format( |
| 2446 | '|'.join(suffixes.keys())), re.I) |
| 2447 | |
| 2448 | m = size_re.match(size_str.lower()) |
| 2449 | if not m or m.group(2) not in suffixes: |
| 2450 | raise ValueError(f'value {size_str!r} not a valid size') |
| 2451 | return int(float(m.group(1)) * suffixes[m.group(2)]) |
| 2452 | |
| 2453 | |
| 2454 | def _get_mem_available(): |
no test coverage detected