Allow delattr and del operations
This commit is contained in:
parent
d34e169d1e
commit
ec39437bfd
|
@ -113,15 +113,27 @@ class TestCore(unittest.TestCase):
|
|||
self.assertRaises(exc, sweden.clear)
|
||||
self.assertRaises(exc, sweden.pop, 0)
|
||||
self.assertRaises(exc, sweden.popitem)
|
||||
self.assertRaises(exc, sweden.__delitem__, 'name')
|
||||
|
||||
def test_dict_syntax(self):
|
||||
Country = warlock.model_factory(fixture)
|
||||
sweden = Country(name='Sweden', population=9379116)
|
||||
self.assertEqual(sweden['name'], 'Sweden')
|
||||
|
||||
sweden['name'] = 'Finland'
|
||||
self.assertEqual(sweden['name'], 'Finland')
|
||||
|
||||
del sweden['name']
|
||||
self.assertRaises(AttributeError, getattr, sweden, 'name')
|
||||
|
||||
def test_attr_syntax(self):
|
||||
Country = warlock.model_factory(fixture)
|
||||
sweden = Country(name='Sweden', population=9379116)
|
||||
|
||||
sweden.name = 'Finland'
|
||||
self.assertEqual(sweden.name, 'Finland')
|
||||
|
||||
delattr(sweden, 'name')
|
||||
self.assertRaises(AttributeError, getattr, sweden, 'name')
|
||||
|
||||
def test_changes(self):
|
||||
Country = warlock.model_factory(fixture)
|
||||
sweden = Country(name='Sweden', population=9379116)
|
||||
|
|
|
@ -76,7 +76,18 @@ def model_factory(schema):
|
|||
raise InvalidOperation()
|
||||
|
||||
def __delitem__(self, key):
|
||||
raise InvalidOperation()
|
||||
mutation = dict(self.items())
|
||||
del mutation[key]
|
||||
try:
|
||||
self.validator(mutation)
|
||||
except ValidationError:
|
||||
msg = "Unable to delete attribute '%s'" % (key)
|
||||
raise InvalidOperation(msg)
|
||||
|
||||
dict.__delitem__(self, key)
|
||||
|
||||
def __delattr__(self, key):
|
||||
self.__delitem__(key)
|
||||
|
||||
# NOTE(termie): This is kind of the opposite of what copy usually does
|
||||
def copy(self):
|
||||
|
|
Loading…
Reference in New Issue