Merge pull request #45 from sebpiq/master

Clean overloads + fixed a bug in serializers
This commit is contained in:
Tom Christie 2011-07-11 12:33:15 -07:00
commit e4ce57b88c
2 changed files with 11 additions and 10 deletions

View File

@ -161,17 +161,18 @@ class RequestMixin(object):
return return
# At this point we're committed to parsing the request as form data. # At this point we're committed to parsing the request as form data.
self._data = data = self.request.POST self._data = data = self.request.POST.copy()
self._files = self.request.FILES self._files = self.request.FILES
# Method overloading - change the method and remove the param from the content. # Method overloading - change the method and remove the param from the content.
if self._METHOD_PARAM in data: if self._METHOD_PARAM in data:
self._method = data[self._METHOD_PARAM].upper() # NOTE: unlike `get`, `pop` on a `QueryDict` seems to return a list of values.
self._method = self._data.pop(self._METHOD_PARAM)[0].upper()
# Content overloading - modify the content type, and re-parse. # Content overloading - modify the content type, and re-parse.
if self._CONTENT_PARAM in data and self._CONTENTTYPE_PARAM in data: if self._CONTENT_PARAM in data and self._CONTENTTYPE_PARAM in data:
self._content_type = data[self._CONTENTTYPE_PARAM] self._content_type = self._data.pop(self._CONTENTTYPE_PARAM)[0]
stream = StringIO(data[self._CONTENT_PARAM]) stream = StringIO(self._data.pop(self._CONTENT_PARAM)[0])
(self._data, self._files) = self._parse(stream, self._content_type) (self._data, self._files) = self._parse(stream, self._content_type)

View File

@ -228,16 +228,16 @@ class Serializer(object):
# serialize each required field # serialize each required field
for fname in fields: for fname in fields:
if fname in instance: if hasattr(self, smart_str(fname)):
# finally check for a key 'fname' on the instance # check first for a method 'fname' on self first
obj = instance[fname]
elif hasattr(self, smart_str(fname)):
# check for a method 'fname' on self first
meth = getattr(self, fname) meth = getattr(self, fname)
if inspect.ismethod(meth) and len(inspect.getargspec(meth)[0]) == 2: if inspect.ismethod(meth) and len(inspect.getargspec(meth)[0]) == 2:
obj = meth(instance) obj = meth(instance)
elif hasattr(instance, '__contains__') and fname in instance:
# check for a key 'fname' on the instance
obj = instance[fname]
elif hasattr(instance, smart_str(fname)): elif hasattr(instance, smart_str(fname)):
# now check for an attribute 'fname' on the instance # finally check for an attribute 'fname' on the instance
obj = getattr(instance, fname) obj = getattr(instance, fname)
else: else:
continue continue