From 6ebe6e98d7ca6b3db6cc830898e51e00e06f4ef4 Mon Sep 17 00:00:00 2001 From: Gorka Eguileor Date: Fri, 6 Mar 2015 13:13:05 +0100 Subject: [PATCH] Remove duplicate find request in find_resource Removed duplicate manager.find method call using search argument display_name that affected any command that searches for a volume by display_name or any command that searches for non existent volumes. Change-Id: I86c99b41dd231b058ed3f6d5d78eafe35a111dec Closes-Bug: #1429102 --- cinderclient/tests/unit/test_utils.py | 3 +++ cinderclient/utils.py | 33 +++++++++++++-------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/cinderclient/tests/unit/test_utils.py b/cinderclient/tests/unit/test_utils.py index 43b0c2e69..0228cf672 100644 --- a/cinderclient/tests/unit/test_utils.py +++ b/cinderclient/tests/unit/test_utils.py @@ -14,6 +14,7 @@ import collections import sys +import mock from six import moves from cinderclient import exceptions @@ -66,10 +67,12 @@ class FindResourceTestCase(test_utils.TestCase): self.manager = FakeManager(None) def test_find_none(self): + self.manager.find = mock.Mock(side_effect=self.manager.find) self.assertRaises(exceptions.CommandError, utils.find_resource, self.manager, 'asdf') + self.assertEqual(3, self.manager.find.call_count) def test_find_by_integer_id(self): output = utils.find_resource(self.manager, 1234) diff --git a/cinderclient/utils.py b/cinderclient/utils.py index 330d52d8e..cb9125c68 100644 --- a/cinderclient/utils.py +++ b/cinderclient/utils.py @@ -166,17 +166,17 @@ def find_resource(manager, name_or_id): return manager.get(int(name_or_id)) except exceptions.NotFound: pass + else: + # now try to get entity as uuid + try: + uuid.UUID(name_or_id) + return manager.get(name_or_id) + except (ValueError, exceptions.NotFound): + pass if sys.version_info <= (3, 0): name_or_id = strutils.safe_decode(name_or_id) - # now try to get entity as uuid - try: - uuid.UUID(name_or_id) - return manager.get(name_or_id) - except (ValueError, exceptions.NotFound): - pass - try: try: return manager.find(human_id=name_or_id) @@ -187,16 +187,15 @@ def find_resource(manager, name_or_id): try: return manager.find(name=name_or_id) except exceptions.NotFound: - try: - return manager.find(display_name=name_or_id) - except (UnicodeDecodeError, exceptions.NotFound): - try: - # Volumes does not have name, but display_name - return manager.find(display_name=name_or_id) - except exceptions.NotFound: - msg = "No %s with a name or ID of '%s' exists." % \ - (manager.resource_class.__name__.lower(), name_or_id) - raise exceptions.CommandError(msg) + pass + + # Volumes don't have name, but display_name + try: + return manager.find(display_name=name_or_id) + except (UnicodeDecodeError, exceptions.NotFound): + msg = "No %s with a name or ID of '%s' exists." % \ + (manager.resource_class.__name__.lower(), name_or_id) + raise exceptions.CommandError(msg) except exceptions.NoUniqueMatch: msg = ("Multiple %s matches found for '%s', use an ID to be more" " specific." % (manager.resource_class.__name__.lower(),