diff options
author | Jenkins <jenkins@review.openstack.org> | 2012-11-01 17:27:28 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2012-11-01 17:27:28 +0000 |
commit | 6ee9883b8cb1ef8e503a03229a100e50813abe5a (patch) | |
tree | fd155c8bda8c3e9a8f9f7baefa1f3fbf78e1cb2a /nova/utils.py | |
parent | c49d96e08121c89d42a3bcbcece63fd671f1a63d (diff) | |
parent | b04213f5dc75b507ee5bc7fe16af7f7b8a3b0c3a (diff) | |
download | nova-6ee9883b8cb1ef8e503a03229a100e50813abe5a.tar.gz nova-6ee9883b8cb1ef8e503a03229a100e50813abe5a.tar.xz nova-6ee9883b8cb1ef8e503a03229a100e50813abe5a.zip |
Merge "Move to a more canonicalized output from qemu-img info."
Diffstat (limited to 'nova/utils.py')
-rw-r--r-- | nova/utils.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/nova/utils.py b/nova/utils.py index 26637a489..284d72b55 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -63,6 +63,16 @@ FLAGS.register_opt( cfg.BoolOpt('disable_process_locking', default=False, help='Whether to disable inter-process locks')) +# Used for looking up extensions of text +# to their 'multiplied' byte amount +BYTE_MULTIPLIERS = { + '': 1, + 't': 1024 ** 4, + 'g': 1024 ** 3, + 'm': 1024 ** 2, + 'k': 1024, +} + def vpn_ping(address, port, timeout=0.05, session_id=None): """Sends a vpn negotiation packet and returns the server session. @@ -574,6 +584,34 @@ def utf8(value): return value +def to_bytes(text, default=0): + """Try to turn a string into a number of bytes. Looks at the last + characters of the text to determine what conversion is needed to + turn the input text into a byte number. + + Supports: B/b, K/k, M/m, G/g, T/t (or the same with b/B on the end) + + """ + # Take off everything not number 'like' (which should leave + # only the byte 'identifier' left) + mult_key_org = text.lstrip('-1234567890') + mult_key = mult_key_org.lower() + mult_key_len = len(mult_key) + if mult_key.endswith("b"): + mult_key = mult_key[0:-1] + try: + multiplier = BYTE_MULTIPLIERS[mult_key] + if mult_key_len: + # Empty cases shouldn't cause text[0:-0] + text = text[0:-mult_key_len] + return int(text) * multiplier + except KeyError: + msg = _('Unknown byte multiplier: %s') % mult_key_org + raise TypeError(msg) + except ValueError: + return default + + def delete_if_exists(pathname): """delete a file, but ignore file not found error""" |