Private GIT

Skip to content
Snippets Groups Projects
Commit 11a864f5 authored by labrys's avatar labrys
Browse files

Add sep and default_units kwargs to convert_size

parent ed34acc0
No related branches found
No related tags found
No related merge requests found
......@@ -193,24 +193,34 @@ def convert_size(size, default=None, use_decimal=False, **kwargs):
:param default: value to return if conversion fails
:param use_decimal: use decimal instead of binary prefixes (e.g. kilo = 1000 instead of 1024)
:keyword sep: Separator between size and units, default is space
:keyword units: A list of (uppercase) unit names in ascending order. Default units: ['B', 'KB', 'MB', 'GB', 'TB', 'PB']
:keyword default_units: Default unit if none is given, default is lowest unit in the scale, e.g. bytes
:returns: the number of bytes, the default value, or 0
"""
result = None
try:
size_tuple = size.strip().split(' ')
sep = kwargs.pop('sep', ' ')
scale = kwargs.pop('units', ['B', 'KB', 'MB', 'GB', 'TB', 'PB'])
default_units = kwargs.pop('default_units', scale[0])
if sep:
size_tuple = size.strip().split(sep)
scalar, units = size_tuple[0], size_tuple[1:]
units = units[0].upper() if units else default_units
else:
regex_units = re.search(r'(\w+)', size, re.IGNORECASE)
units = regex_units.group() if regex_units else default_units
scalar = size.strip(units)
scalar = float(scalar)
units = units[0].upper() if units else None
scale = kwargs.pop('units', ['B', 'KB', 'MB', 'GB', 'TB', 'PB'])
scalar *= (1024 if not use_decimal else 1000) ** scale.index(units)
result = scalar
# TODO: Make sure fallback methods obey default units
except AttributeError:
result = size if size is not None else default
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment