]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Replace utils.to_bytes() with strutils.to_bytes()
authorZhongyue Luo <zhongyue.nah@intel.com>
Fri, 14 Jun 2013 01:43:40 +0000 (09:43 +0800)
committerZhongyue Luo <zhongyue.nah@intel.com>
Fri, 14 Jun 2013 01:46:38 +0000 (09:46 +0800)
The to_bytes() function have moved to oslo.
Replaced/removed the to_bytes() function with the one in strutils.

Change-Id: I53947b7a333057fec738a02f5643be59e563290d

cinder/image/image_utils.py
cinder/openstack/common/strutils.py
cinder/utils.py

index 2c5450e92200ee5577141bb4d1183db026d67e5c..d9b810a1f17cfad8c8a535c5589ca15d87b3379d 100644 (file)
@@ -35,6 +35,7 @@ from oslo.config import cfg
 from cinder import exception
 from cinder.openstack.common import fileutils
 from cinder.openstack.common import log as logging
+from cinder.openstack.common import strutils
 from cinder import utils
 
 
@@ -94,8 +95,8 @@ class QemuImgInfo(object):
         if real_size:
             details = real_size.group(1)
         try:
-            details = utils.to_bytes(details)
-        except (TypeError, ValueError):
+            details = strutils.to_bytes(details)
+        except TypeError:
             pass
         return details
 
index 2f93610dd54fa7d8c232cf0adc8d02eb7a3a1454..8cd9965996344078270bcd5a029170bbafed8fb3 100644 (file)
@@ -35,7 +35,7 @@ BYTE_MULTIPLIERS = {
     'm': 1024 ** 2,
     'k': 1024,
 }
-
+BYTE_REGEX = re.compile(r'(^-?\d+)(\D*)')
 
 TRUE_STRINGS = ('1', 't', 'true', 'on', 'y', 'yes')
 FALSE_STRINGS = ('0', 'f', 'false', 'off', 'n', 'no')
@@ -162,31 +162,33 @@ def safe_encode(text, incoming=None,
 
 
 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.
+    """Converts a string into an integer 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, K(B), M(B), G(B), and T(B)". (case insensitive)
 
-    Supports: B/b, K/k, M/m, G/g, T/t (or the same with b/B on the end)
+    :param text: String input for bytes size conversion.
+    :param default: Default return value when text is blank.
 
     """
-    # 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
+    match = BYTE_REGEX.search(text)
+    if match:
+        magnitude = int(match.group(1))
+        mult_key_org = match.group(2)
+        if not mult_key_org:
+            return magnitude
+    elif text:
+        msg = _('Invalid string format: %s') % text
         raise TypeError(msg)
-    except ValueError:
+    else:
         return default
+    mult_key = mult_key_org.lower().replace('b', '', 1)
+    multiplier = BYTE_MULTIPLIERS.get(mult_key)
+    if multiplier is None:
+        msg = _('Unknown byte multiplier: %s') % mult_key_org
+        raise TypeError(msg)
+    return magnitude * multiplier
 
 
 def to_slug(value, incoming=None, errors="strict"):
index 98c172dbf30db85f8489aaa7e69792a9956da116..a13a571ce4edf1881679157f789c6a4f203a6b25 100644 (file)
@@ -1124,39 +1124,3 @@ class UndoManager(object):
                 LOG.exception(msg, **kwargs)
 
             self._rollback()
-
-
-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)
-
-    """
-    BYTE_MULTIPLIERS = {
-        '': 1,
-        't': 1024 ** 4,
-        'g': 1024 ** 3,
-        'm': 1024 ** 2,
-        'k': 1024,
-    }
-
-    # 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