Provide better fallback when finding id values
At least in the case of object_store's Account resource, it intentionally has no id or name value due to the way the REST API is structured and how it maps to the concepts we're using. However, when looking for the id value of an Account, we end up going through the _alternate_id code and don't find one of those, and thusly end up trying to look up an empty string as the alternate ID. If we don't have an id or an alternate id, the id value should just be None, so intercept any potential KeyError and just return None. Change-Id: I60dde9f8f3c9a0eebaeadc8b2953136ad66c4ed4
This commit is contained in:
parent
809f2fac73
commit
1bca393a6a
@ -290,7 +290,10 @@ class Resource(object):
|
||||
if name in self._body:
|
||||
return self._body[name]
|
||||
else:
|
||||
try:
|
||||
return self._body[self._alternate_id()]
|
||||
except KeyError:
|
||||
return None
|
||||
else:
|
||||
return object.__getattribute__(self, name)
|
||||
|
||||
|
@ -569,6 +569,31 @@ class TestResource(base.TestCase):
|
||||
self.assertIn("y", Test._uri_mapping())
|
||||
self.assertIn("z", Test._uri_mapping())
|
||||
|
||||
def test__getattribute__id_in_body(self):
|
||||
id = "lol"
|
||||
sot = resource2.Resource(id=id)
|
||||
|
||||
result = getattr(sot, "id")
|
||||
self.assertEqual(result, id)
|
||||
|
||||
def test__getattribute__id_with_alternate(self):
|
||||
id = "lol"
|
||||
|
||||
class Test(resource2.Resource):
|
||||
blah = resource2.Body("blah", alternate_id=True)
|
||||
|
||||
sot = Test(blah=id)
|
||||
|
||||
result = getattr(sot, "id")
|
||||
self.assertEqual(result, id)
|
||||
|
||||
def test__getattribute__id_without_alternate(self):
|
||||
class Test(resource2.Resource):
|
||||
id = None
|
||||
|
||||
sot = Test()
|
||||
self.assertIsNone(sot.id)
|
||||
|
||||
def test__alternate_id_None(self):
|
||||
self.assertEqual("", resource2.Resource._alternate_id())
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user