summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Waldon <bcwaldon@gmail.com>2012-07-29 20:13:57 -0700
committerBrian Waldon <bcwaldon@gmail.com>2012-07-29 20:15:11 -0700
commit0a6f016295dc7609bf88b1d36458aeab2aeb4014 (patch)
tree42ff23b69f33e254b1cdce257ddf23d7ee8b0dfc
parent69aed68984cf4aba359193e143b63c7d54a91414 (diff)
downloadwarlock-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.py2
-rw-r--r--test/test_core.py9
-rw-r--r--warlock/core.py7
3 files changed, 17 insertions, 1 deletions
diff --git a/setup.py b/setup.py
index e20c6e1..019e556 100644
--- a/setup.py
+++ b/setup.py
@@ -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