Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-09-09 10:16:45 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-09-09 10:16:45 (GMT)
commit0417cdfdf8fd56eab8bfc6876c60d62e62063f90 (patch)
treeec18f5e077b3187543e9bfb40d6f9ec41af1063b
parent8b1c50c5d1fab5b8704c0195814825774ea90787 (diff)
Make it possible to override metadata even for absent props
-rw-r--r--active_document/document.py6
-rw-r--r--active_document/metadata.py2
-rwxr-xr-xtests/units/document.py18
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):