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 <shane.wang@intel.com>
This commit is contained in:
Shane Wang 2013-05-21 13:55:53 +08:00
parent 2925d5bbda
commit bc0ad1cb9d
5 changed files with 44 additions and 16 deletions

View File

@ -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

View File

@ -346,19 +346,6 @@ def slugify(value):
return _slugify_hyphenate_re.sub('-', 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): def _load_entry_point(ep_name, name=None):
"""Try to load the entry point ep_name that matches name.""" """Try to load the entry point ep_name that matches name."""
for ep in pkg_resources.iter_entry_points(ep_name, name=name): for ep in pkg_resources.iter_entry_points(ep_name, name=name):

View File

@ -7,6 +7,7 @@ import urllib
from novaclient import base from novaclient import base
from novaclient import exceptions from novaclient import exceptions
from novaclient import utils from novaclient import utils
from novaclient.openstack.common import uuidutils
class Flavor(base.Resource): class Flavor(base.Resource):
@ -147,7 +148,7 @@ class FlavorManager(base.ManagerWithFind):
if flavorid == "auto": if flavorid == "auto":
flavorid = None flavorid = None
elif not utils.is_uuid_like(flavorid): elif not uuidutils.is_uuid_like(flavorid):
try: try:
flavorid = int(flavorid) flavorid = int(flavorid)
except (TypeError, ValueError): except (TypeError, ValueError):

View File

@ -28,6 +28,7 @@ import time
from novaclient import exceptions from novaclient import exceptions
from novaclient.openstack.common import strutils from novaclient.openstack.common import strutils
from novaclient.openstack.common import timeutils from novaclient.openstack.common import timeutils
from novaclient.openstack.common import uuidutils
from novaclient import utils from novaclient import utils
from novaclient.v1_1 import availability_zones from novaclient.v1_1 import availability_zones
from novaclient.v1_1 import quotas from novaclient.v1_1 import quotas
@ -1883,7 +1884,7 @@ def _print_secgroups(secgroups):
def _get_secgroup(cs, secgroup): def _get_secgroup(cs, secgroup):
# Check secgroup is an ID # Check secgroup is an ID
if utils.is_uuid_like(strutils.safe_encode(secgroup)): if uuidutils.is_uuid_like(strutils.safe_encode(secgroup)):
try: try:
return cs.security_groups.get(secgroup) return cs.security_groups.get(secgroup)
except exceptions.NotFound: except exceptions.NotFound:

View File

@ -1,7 +1,7 @@
[DEFAULT] [DEFAULT]
# The list of modules to copy from openstack-common # 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 # The base module to hold the copy of openstack.common
base=novaclient base=novaclient