Allow delattr and del operations

This commit is contained in:
Brian Waldon 2012-11-26 11:40:09 -05:00
parent d34e169d1e
commit ec39437bfd
2 changed files with 26 additions and 3 deletions

View File

@ -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)

View File

@ -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):