def get(self, key, default=None):
return copy.deepcopy(self.viewed_dict.get(key, default))
- def has_key(self, key):
- return self.viewed_dict.has_key(key)
-
def items(self):
return [copy.deepcopy(v) for v in self.viewed_dict.items()]
not export empty-valued attributes) if the attribute
is not iterable (e.g. list or set), in which case
a empty iterable should be used.
+
+ Normalizing methods should hold the following contract:
+ - They are used to validate and normalize the user input.
+ Any attribute value that comes from the user (during Task
+ initialization, assignign values to Task attributes, or
+ filtering by user-provided values of attributes) is first
+ validated and normalized using the normalize_{key} method.
+ - If validation or normalization fails, normalizer is expected
+ to raise ValueError.
"""
def _deserialize(self, key, value):
or entered as a value of Task attribute.
"""
+ # None value should not be converted by normalizer
+ if value is None:
+ return None
+
normalize_func = getattr(self, 'normalize_{0}'.format(key),
lambda x: x)
# If the value is already localized, there is no need to change
# time zone at this point. Also None is a valid value too.
localized = value
-
+
return localized
def normalize_uuid(self, value):
for (key, value) in six.iteritems(kwargs))
self._original_data = copy.deepcopy(self._data)
+ # Provide read only access to the original data
+ self.original = ReadOnlyDictView(self._original_data)
+
def __unicode__(self):
return self['description']