Have Serializer.serialize take a generic **kwargs dict, and BaseResource.serialize take a request.

This commit is contained in:
Mjumbe Wawatu Poe 2012-08-25 01:45:14 -04:00
parent 239d8c6c4d
commit ef952c9b05
2 changed files with 17 additions and 11 deletions

View File

@ -33,6 +33,16 @@ class BaseResource(Serializer):
"""
return self.serialize(obj)
def serialize(self, obj, request=None, **kwargs):
"""
Convert the resource into a serializable representation.
"""
# Request from related serializer.
if request is not None:
self.request = request
return super(BaseResource, self).serialize(obj, request=request, **kwargs)
class Resource(BaseResource):
"""

View File

@ -96,7 +96,7 @@ class Serializer(object):
"""
The maximum depth to serialize to, or `None`.
"""
parent = None
"""
A reference to the root serializer when descending down into fields.
@ -169,7 +169,7 @@ class Serializer(object):
"""
return self.rename.get(smart_str(key), smart_str(key))
def serialize_val(self, key, obj, related_info):
def serialize_val(self, key, obj, related_info, **kwargs):
"""
Convert a model field or dict value into a serializable representation.
"""
@ -189,7 +189,7 @@ class Serializer(object):
stack.append(obj)
return related_serializer(depth=depth, stack=stack).serialize(
obj, request=getattr(self, 'request', None))
obj, **kwargs)
def serialize_max_depth(self, obj):
"""
@ -205,7 +205,7 @@ class Serializer(object):
"""
raise _SkipField
def serialize_model(self, instance):
def serialize_model(self, instance, **kwargs):
"""
Given a model instance or dict, serialize it to a dict..
"""
@ -232,7 +232,7 @@ class Serializer(object):
continue
key = self.serialize_key(fname)
val = self.serialize_val(fname, obj, related_info)
val = self.serialize_val(fname, obj, related_info, **kwargs)
data[key] = val
except _SkipField:
pass
@ -263,18 +263,14 @@ class Serializer(object):
"""
return smart_unicode(obj, strings_only=True)
def serialize(self, obj, request=None):
def serialize(self, obj, **kwargs):
"""
Convert any object into a serializable representation.
"""
# Request from related serializer.
if request is not None:
self.request = request
if isinstance(obj, (dict, models.Model)):
# Model instances & dictionaries
return self.serialize_model(obj)
return self.serialize_model(obj, **kwargs)
elif isinstance(obj, (tuple, list, set, QuerySet, RawQuerySet, types.GeneratorType)):
# basic iterables
return self.serialize_iter(obj)