diff options
author | Brian Waldon <bcwaldon@gmail.com> | 2012-07-29 20:13:57 -0700 |
---|---|---|
committer | Brian Waldon <bcwaldon@gmail.com> | 2012-07-29 20:15:11 -0700 |
commit | 0a6f016295dc7609bf88b1d36458aeab2aeb4014 (patch) | |
tree | 42ff23b69f33e254b1cdce257ddf23d7ee8b0dfc | |
parent | 69aed68984cf4aba359193e143b63c7d54a91414 (diff) | |
download | warlock-0a6f016295dc7609bf88b1d36458aeab2aeb4014.tar.gz |
Add 'changes' attribute to models
The 'changes' attribute returns a dictionary representing the state
of any top-level properties that have been changed since the object
was instantiated.
Bump version to v0.4.0
-rw-r--r-- | setup.py | 2 | ||||
-rw-r--r-- | test/test_core.py | 9 | ||||
-rw-r--r-- | warlock/core.py | 7 |
3 files changed, 17 insertions, 1 deletions
@@ -11,7 +11,7 @@ def parse_requirements(): setuptools.setup( name='warlock', - version='0.3.1', + version='0.4.0', description='Python object model built on top of JSON schema', author='Brian Waldon', author_email='bcwaldon@gmail.com', diff --git a/test/test_core.py b/test/test_core.py index 3502712..bc2828c 100644 --- a/test/test_core.py +++ b/test/test_core.py @@ -69,3 +69,12 @@ class TestCore(unittest.TestCase): self.assertEqual(sweden['name'], 'Sweden') sweden['name'] = 'Finland' self.assertEqual(sweden['name'], 'Finland') + + def test_changes(self): + Country = warlock.model_factory(fixture) + sweden = Country(name='Sweden', population=9379116) + self.assertEqual(sweden.changes, {}) + sweden['name'] = 'Finland' + self.assertEqual(sweden.changes, {'name': 'Finland'}) + sweden['name'] = 'Norway' + self.assertEqual(sweden.changes, {'name': 'Norway'}) diff --git a/warlock/core.py b/warlock/core.py index c8359b7..eacd7ab 100644 --- a/warlock/core.py +++ b/warlock/core.py @@ -38,6 +38,8 @@ def model_factory(schema): else: self.__dict__['raw'] = kwargs + self.__dict__['changes'] = {} + def __getattr__(self, key): try: return self.__getitem__(key) @@ -55,6 +57,7 @@ def model_factory(schema): except ValidationError: raise InvalidOperation() self.__dict__['raw'] = mutation + self.__dict__['changes'][key] = value def __setattr__(self, key, value): self.__setitem__(key, value) @@ -65,5 +68,9 @@ def model_factory(schema): def items(self): return copy.deepcopy(self.__dict__['raw']).items() + @property + def changes(self): + return copy.deepcopy(self.__dict__['changes']) + Model.__name__ = str(schema['name']) return Model |