diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2012-09-09 10:16:45 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2012-09-09 10:16:45 (GMT) |
commit | 0417cdfdf8fd56eab8bfc6876c60d62e62063f90 (patch) | |
tree | ec18f5e077b3187543e9bfb40d6f9ec41af1063b | |
parent | 8b1c50c5d1fab5b8704c0195814825774ea90787 (diff) |
Make it possible to override metadata even for absent props
-rw-r--r-- | active_document/document.py | 6 | ||||
-rw-r--r-- | active_document/metadata.py | 2 | ||||
-rwxr-xr-x | tests/units/document.py | 18 |
3 files changed, 19 insertions, 7 deletions
diff --git a/active_document/document.py b/active_document/document.py index 65d2950..53f9b0e 100644 --- a/active_document/document.py +++ b/active_document/document.py @@ -17,7 +17,6 @@ import logging from active_document import env from active_document.metadata import BrowsableProperty, StoredProperty -from active_document.metadata import BlobProperty from active_document.metadata import active_property from active_toolkit import enforce @@ -92,10 +91,7 @@ class Document(object): def meta(self, prop): prop = self.metadata[prop] - result = self._record.get(prop.name) - if result is not None and isinstance(prop, BlobProperty): - prop.on_get(self, result) - return result + return prop.on_get(self, self._record.get(prop.name)) def properties(self, names=None, accept_language=None): result = {} diff --git a/active_document/metadata.py b/active_document/metadata.py index 12e7b82..8869873 100644 --- a/active_document/metadata.py +++ b/active_document/metadata.py @@ -108,7 +108,7 @@ class Property(object): def __init__(self, name, permissions=env.ACCESS_PUBLIC, typecast=None, reprcast=None, default=None): self.setter = None - self.on_get = None + self.on_get = lambda self, x: x self._name = name self._permissions = permissions self._typecast = typecast diff --git a/tests/units/document.py b/tests/units/document.py index 33fe5de..c6326f9 100755 --- a/tests/units/document.py +++ b/tests/units/document.py @@ -192,18 +192,34 @@ class DocumentTest(tests.Test): class Document(document.Document): + @active_property(slot=1, default=1) + def prop1(self, value): + return value + + @active_property(slot=2, default=2) + def prop2(self, value): + return -1 + @active_property(BlobProperty) def blob(self, meta): meta['path'] = 'new-blob' return meta + @active_property(BlobProperty) + def empty_blob(self, meta): + return {'url': 'url'} + directory = Directory(tests.tmpdir, Document, IndexWriter) guid = directory.create({'user': []}) doc = directory.get(guid) self.touch(('new-blob', 'new-blob')) directory.set_blob(guid, 'blob', StringIO('old-blob')) - self.assertEqual('new-blob', file(doc.meta('blob')['path']).read()) + + self.assertEqual('new-blob', doc.meta('blob')['path']) + self.assertEqual({'url': 'url'}, doc.meta('empty_blob')) + self.assertEqual('1', doc.meta('prop1')['value']) + self.assertEqual(-1, doc.meta('prop2')) def test_update(self): |