mirror of https://github.com/docker/docker-py.git
Improve parse_bytes util method
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
03279ff9a3
commit
7440603d98
|
@ -518,41 +518,43 @@ def longint(n):
|
||||||
|
|
||||||
|
|
||||||
def parse_bytes(s):
|
def parse_bytes(s):
|
||||||
|
if isinstance(s, six.integer_types + (float,)):
|
||||||
|
return s
|
||||||
if len(s) == 0:
|
if len(s) == 0:
|
||||||
s = 0
|
return 0
|
||||||
|
|
||||||
|
if s[-2:-1].isalpha() and s[-1].isalpha():
|
||||||
|
if s[-1] == "b" or s[-1] == "B":
|
||||||
|
s = s[:-1]
|
||||||
|
units = BYTE_UNITS
|
||||||
|
suffix = s[-1].lower()
|
||||||
|
|
||||||
|
# Check if the variable is a string representation of an int
|
||||||
|
# without a units part. Assuming that the units are bytes.
|
||||||
|
if suffix.isdigit():
|
||||||
|
digits_part = s
|
||||||
|
suffix = 'b'
|
||||||
else:
|
else:
|
||||||
if s[-2:-1].isalpha() and s[-1].isalpha():
|
digits_part = s[:-1]
|
||||||
if s[-1] == "b" or s[-1] == "B":
|
|
||||||
s = s[:-1]
|
|
||||||
units = BYTE_UNITS
|
|
||||||
suffix = s[-1].lower()
|
|
||||||
|
|
||||||
# Check if the variable is a string representation of an int
|
if suffix in units.keys() or suffix.isdigit():
|
||||||
# without a units part. Assuming that the units are bytes.
|
try:
|
||||||
if suffix.isdigit():
|
digits = longint(digits_part)
|
||||||
digits_part = s
|
except ValueError:
|
||||||
suffix = 'b'
|
|
||||||
else:
|
|
||||||
digits_part = s[:-1]
|
|
||||||
|
|
||||||
if suffix in units.keys() or suffix.isdigit():
|
|
||||||
try:
|
|
||||||
digits = longint(digits_part)
|
|
||||||
except ValueError:
|
|
||||||
raise errors.DockerException(
|
|
||||||
'Failed converting the string value for memory ({0}) to'
|
|
||||||
' an integer.'.format(digits_part)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Reconvert to long for the final result
|
|
||||||
s = longint(digits * units[suffix])
|
|
||||||
else:
|
|
||||||
raise errors.DockerException(
|
raise errors.DockerException(
|
||||||
'The specified value for memory ({0}) should specify the'
|
'Failed converting the string value for memory ({0}) to'
|
||||||
' units. The postfix should be one of the `b` `k` `m` `g`'
|
' an integer.'.format(digits_part)
|
||||||
' characters'.format(s)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Reconvert to long for the final result
|
||||||
|
s = longint(digits * units[suffix])
|
||||||
|
else:
|
||||||
|
raise errors.DockerException(
|
||||||
|
'The specified value for memory ({0}) should specify the'
|
||||||
|
' units. The postfix should be one of the `b` `k` `m` `g`'
|
||||||
|
' characters'.format(s)
|
||||||
|
)
|
||||||
|
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
@ -594,16 +596,10 @@ def create_host_config(binds=None, port_bindings=None, lxc_conf=None,
|
||||||
version = constants.DEFAULT_DOCKER_API_VERSION
|
version = constants.DEFAULT_DOCKER_API_VERSION
|
||||||
|
|
||||||
if mem_limit is not None:
|
if mem_limit is not None:
|
||||||
if isinstance(mem_limit, six.string_types):
|
host_config['Memory'] = parse_bytes(mem_limit)
|
||||||
mem_limit = parse_bytes(mem_limit)
|
|
||||||
|
|
||||||
host_config['Memory'] = mem_limit
|
|
||||||
|
|
||||||
if memswap_limit is not None:
|
if memswap_limit is not None:
|
||||||
if isinstance(memswap_limit, six.string_types):
|
host_config['MemorySwap'] = parse_bytes(memswap_limit)
|
||||||
memswap_limit = parse_bytes(memswap_limit)
|
|
||||||
|
|
||||||
host_config['MemorySwap'] = memswap_limit
|
|
||||||
|
|
||||||
if mem_swappiness is not None:
|
if mem_swappiness is not None:
|
||||||
if version_lt(version, '1.20'):
|
if version_lt(version, '1.20'):
|
||||||
|
@ -873,9 +869,9 @@ def create_container_config(
|
||||||
if isinstance(labels, list):
|
if isinstance(labels, list):
|
||||||
labels = dict((lbl, six.text_type('')) for lbl in labels)
|
labels = dict((lbl, six.text_type('')) for lbl in labels)
|
||||||
|
|
||||||
if isinstance(mem_limit, six.string_types):
|
if mem_limit is not None:
|
||||||
mem_limit = parse_bytes(mem_limit)
|
mem_limit = parse_bytes(mem_limit)
|
||||||
if isinstance(memswap_limit, six.string_types):
|
if memswap_limit is not None:
|
||||||
memswap_limit = parse_bytes(memswap_limit)
|
memswap_limit = parse_bytes(memswap_limit)
|
||||||
|
|
||||||
if isinstance(ports, list):
|
if isinstance(ports, list):
|
||||||
|
|
|
@ -1045,7 +1045,7 @@ class ContainerUpdateTest(helpers.BaseTestCase):
|
||||||
)
|
)
|
||||||
self.tmp_containers.append(container)
|
self.tmp_containers.append(container)
|
||||||
self.client.start(container)
|
self.client.start(container)
|
||||||
print(self.client.update_container(container, mem_limit=new_mem_limit))
|
self.client.update_container(container, mem_limit=new_mem_limit)
|
||||||
inspect_data = self.client.inspect_container(container)
|
inspect_data = self.client.inspect_container(container)
|
||||||
self.assertEqual(inspect_data['HostConfig']['Memory'], new_mem_limit)
|
self.assertEqual(inspect_data['HostConfig']['Memory'], new_mem_limit)
|
||||||
self.assertEqual(inspect_data['HostConfig']['CpuShares'], 102)
|
self.assertEqual(inspect_data['HostConfig']['CpuShares'], 102)
|
||||||
|
|
Loading…
Reference in New Issue