diff --git a/core/utils/descriptors/evaluated.py b/core/utils/descriptors/evaluated.py index 0e1b687..4f57682 100644 --- a/core/utils/descriptors/evaluated.py +++ b/core/utils/descriptors/evaluated.py @@ -66,8 +66,9 @@ class Evaluated(object): def __set__(self, instance, value): attribs = instance.__dict__ value = value or self.default - if isinstance(value, six.text_type) and value.startswith('${') and value.endswith('}'): + if isinstance(value, six.string_types) and value.startswith('${') and value.endswith('}'): attribs[self.name_raw] = value[2:-1].strip() + attribs.pop(self.name, None) # reset previous eval result else: attribs[self.name] = type(self.default)(value) diff --git a/tests/test_evaled_property.py b/tests/test_evaled_property.py index 27957cd..468f16b 100644 --- a/tests/test_evaled_property.py +++ b/tests/test_evaled_property.py @@ -56,6 +56,8 @@ def test_evaled(): assert a.foo == 11 and a.foo == 11 assert a.called['foo'] == 2 assert not a.errors + a.foo = u'${ 10 + 2 }' + assert a.foo == 12 def test_evaled_with_default():