Merge "Rework update_attrs so dirty list always updated"

This commit is contained in:
Jenkins
2015-04-14 15:28:34 +00:00
committed by Gerrit Code Review
3 changed files with 27 additions and 18 deletions

View File

@@ -31,6 +31,7 @@ There are plenty of examples of use of this class in the SDK code.
import abc
import collections
import itertools
import six
from six.moves.urllib import parse as url_parse
@@ -434,13 +435,10 @@ class Resource(collections.MutableMapping):
:rtype: None
"""
# ensure setters are called for type coercion
for key, value in dict(*args).items():
for key, value in itertools.chain(dict(*args).items(), kwargs.items()):
if key != "id": # id property is read only
self._attrs[key] = value
setattr(self, key, value)
for key, value in kwargs.items():
setattr(self, key, value)
self[key] = value
def get_headers(self):
if HEADERS in self._attrs:

View File

@@ -178,11 +178,10 @@ class PropTests(base.TestCase):
attr = resource.prop("something", alias="attr")
val = "hey"
args = {"attr": val}
args = {"something": val}
sot = Test(args)
self.assertEqual(val, sot._attrs["something"])
self.assertIsNone(sot._attrs.get("attr"))
self.assertEqual(val, sot.attr)
@@ -523,13 +522,13 @@ class ResourceTests(base.TestTransportBase):
FakeResource.resource_key]
self.assertEqual(4, len(last_req))
self.assertEqual('True', last_req['enabled'])
self.assertTrue(last_req['enabled'])
self.assertEqual(fake_name, last_req['name'])
self.assertEqual(fake_attr1, last_req['attr1'])
self.assertEqual(fake_attr2, last_req['attr2'])
self.assertEqual(fake_id, obj.id)
self.assertEqual('True', obj['enabled'])
self.assertTrue(obj['enabled'])
self.assertEqual(fake_name, obj['name'])
self.assertEqual(fake_attr1, obj['attr1'])
self.assertEqual(fake_attr2, obj['attr2'])
@@ -896,23 +895,35 @@ class ResourceTests(base.TestTransportBase):
moe = resource.prop("the-attr")
larry = resource.prop("the-attr2")
curly = resource.prop("the-attr3", type=int)
shemp = resource.prop("the-attr4")
value1 = "one"
value2 = "two"
value3 = "3"
value4 = "fore"
value5 = "fiver"
sot = Test({"the-attr": value1})
sot.update_attrs({"the-attr2": value2, "notprop": value4})
sot.update_attrs(curly=value3)
self.assertTrue(sot.is_dirty)
self.assertEqual(value1, sot.moe)
self.assertEqual(value1, sot["the-attr"])
self.assertEqual(value2, sot.larry)
self.assertEqual(value4, sot.notprop)
sot._reset_dirty()
sot.update_attrs(curly=value3)
self.assertTrue(sot.is_dirty)
self.assertEqual(int, type(sot.curly))
self.assertEqual(int(value3), sot.curly)
self.assertEqual(value4, sot["notprop"])
sot._reset_dirty()
sot.update_attrs(**{"the-attr4": value5})
self.assertTrue(sot.is_dirty)
self.assertEqual(value5, sot.shemp)
def test_get_id(self):
class Test(resource.Resource):
@@ -968,12 +979,12 @@ class ResourceTests(base.TestTransportBase):
def test_boolstr_prop(self):
faker = FakeResource(fake_data)
self.assertEqual(True, faker.enabled)
self.assertEqual('True', faker['enabled'])
self.assertTrue(faker.enabled)
self.assertTrue(faker['enabled'])
faker.enabled = False
self.assertEqual(False, faker.enabled)
self.assertEqual('False', faker['enabled'])
faker._attrs['enabled'] = False
self.assertFalse(faker.enabled)
self.assertFalse(faker['enabled'])
# should fail fast
def set_invalid():

View File

@@ -74,7 +74,7 @@ class TestVolume(testtools.TestCase):
self.assertEqual(VOLUME["bootable"], sot.bootable)
self.assertEqual(VOLUME["created_at"], sot.created)
self.assertEqual(VOLUME["description"], sot.description)
self.assertEqual(VOLUME["volume_type"], sot.volume_type)
self.assertEqual(VOLUME["volume_type"], sot.type)
self.assertEqual(VOLUME["snapshot_id"], sot.snapshot)
self.assertEqual(VOLUME["source_volid"], sot.source_volume)
self.assertEqual(VOLUME["metadata"], sot.metadata)