From bc0ad1cb9dcee8c5c3c11a9dd894ad7c8763f147 Mon Sep 17 00:00:00 2001 From: Shane Wang Date: Tue, 21 May 2013 13:55:53 +0800 Subject: [PATCH] Reuse oslo for is_uuid_like() implementation In the original code, isalnum() in is_uuid_like() doesn't allow "-", while for UUID, format like aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa should be allowed. This patch is to reuse uuidutils's API in oslo. Change-Id: I339974c75a32d27f8e4443a1b97bb6e410933aa4 Signed-off-by: Shane Wang --- novaclient/openstack/common/uuidutils.py | 39 ++++++++++++++++++++++++ novaclient/utils.py | 13 -------- novaclient/v1_1/flavors.py | 3 +- novaclient/v1_1/shell.py | 3 +- openstack-common.conf | 2 +- 5 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 novaclient/openstack/common/uuidutils.py diff --git a/novaclient/openstack/common/uuidutils.py b/novaclient/openstack/common/uuidutils.py new file mode 100644 index 000000000..7608acb94 --- /dev/null +++ b/novaclient/openstack/common/uuidutils.py @@ -0,0 +1,39 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright (c) 2012 Intel Corporation. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +UUID related utilities and helper functions. +""" + +import uuid + + +def generate_uuid(): + return str(uuid.uuid4()) + + +def is_uuid_like(val): + """Returns validation of a value as a UUID. + + For our purposes, a UUID is a canonical form string: + aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa + + """ + try: + return str(uuid.UUID(val)) == val + except (TypeError, ValueError, AttributeError): + return False diff --git a/novaclient/utils.py b/novaclient/utils.py index 3a0ad3b6a..b1df1472e 100644 --- a/novaclient/utils.py +++ b/novaclient/utils.py @@ -346,19 +346,6 @@ def slugify(value): return _slugify_hyphenate_re.sub('-', value) -def is_uuid_like(val): - """ - The UUID which doesn't contain hyphens or 'A-F' is allowed. - """ - try: - if uuid.UUID(val) and val.isalnum() and val.islower(): - return True - else: - return False - except (TypeError, ValueError, AttributeError): - return False - - def _load_entry_point(ep_name, name=None): """Try to load the entry point ep_name that matches name.""" for ep in pkg_resources.iter_entry_points(ep_name, name=name): diff --git a/novaclient/v1_1/flavors.py b/novaclient/v1_1/flavors.py index b859d3fbb..0cd5fc77b 100644 --- a/novaclient/v1_1/flavors.py +++ b/novaclient/v1_1/flavors.py @@ -7,6 +7,7 @@ import urllib from novaclient import base from novaclient import exceptions from novaclient import utils +from novaclient.openstack.common import uuidutils class Flavor(base.Resource): @@ -147,7 +148,7 @@ class FlavorManager(base.ManagerWithFind): if flavorid == "auto": flavorid = None - elif not utils.is_uuid_like(flavorid): + elif not uuidutils.is_uuid_like(flavorid): try: flavorid = int(flavorid) except (TypeError, ValueError): diff --git a/novaclient/v1_1/shell.py b/novaclient/v1_1/shell.py index 6b8e24854..227d5ef3a 100644 --- a/novaclient/v1_1/shell.py +++ b/novaclient/v1_1/shell.py @@ -28,6 +28,7 @@ import time from novaclient import exceptions from novaclient.openstack.common import strutils from novaclient.openstack.common import timeutils +from novaclient.openstack.common import uuidutils from novaclient import utils from novaclient.v1_1 import availability_zones from novaclient.v1_1 import quotas @@ -1883,7 +1884,7 @@ def _print_secgroups(secgroups): def _get_secgroup(cs, secgroup): # Check secgroup is an ID - if utils.is_uuid_like(strutils.safe_encode(secgroup)): + if uuidutils.is_uuid_like(strutils.safe_encode(secgroup)): try: return cs.security_groups.get(secgroup) except exceptions.NotFound: diff --git a/openstack-common.conf b/openstack-common.conf index 284402247..a3197a085 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -1,7 +1,7 @@ [DEFAULT] # The list of modules to copy from openstack-common -modules=timeutils,strutils +modules=timeutils,strutils,uuidutils # The base module to hold the copy of openstack.common base=novaclient