示例#1
0
    def serialize(self, resource_instance, options=None, request=None):
        """
        Serialize a resource instance. This method must return a json-convertible dictionary.
        This method use caches if available.
        """

        def load_cache(**_kwargs):
            return self.instance_to_python(resource_instance, exclude=self._meta.cache_ignored, options=options,
                                           request=request, **_kwargs)

        if self._meta.cache_key_format:
            cache = SimpleCache(self._meta.cache_key_format, self._meta.cache_duration, load_cache)
            ret = cache.get(pk=resource_instance._pk)
        else:
            ret = load_cache(pk=resource_instance._pk)
        if self._meta.cache_ignored:
            ret.update(self.instance_to_python(resource_instance,
                                               fields=self._meta.cache_ignored + self._meta.cache_ignored_virtual_only,
                                               request=request))
        elif self._meta.cache_ignored_virtual_only:
            ret.update(
                resource_instance.all_virtual_items(fields=self._meta.cache_ignored_virtual_only, request=request))
        if self._meta.filter_include or self._meta.filter_exclude:
            ret = recursive_dict_filter(ret, self._meta.filter_include, self._meta.filter_exclude)
        if options:
            if 'date_format' in options:
                is_timestamp_mode = options['date_format'] == 'F'
                if is_timestamp_mode:
                    for each in self._meta.date_format_fields:
                        if each in ret and ret[each]:
                            ret[each] = str(datetime.datetime.fromtimestamp(int(ret[each])))

        return ret
示例#2
0
 def to_dict(self, fields=None, exclude=None, options=None, request=None):
     ret = self._manager.serialize(self, options=options, request=request)
     if fields or exclude:
         ret = recursive_dict_filter(ret, fields, exclude)
     return ret