Merge "Rework update_attrs so dirty list always updated"
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user