aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/request.py
diff options
context:
space:
mode:
authorTom Christie2012-09-03 14:28:40 +0100
committerTom Christie2012-09-03 14:28:40 +0100
commit7abef9ac3b3fb20a6cdef5d52c640e5725c93437 (patch)
tree2cd3270b7079f8b20eb3e3e90d8181c37c4199cb /djangorestframework/request.py
parentd180e984e9779673c2d8aab3c65b4763432ba6b5 (diff)
downloaddjango-rest-framework-7abef9ac3b3fb20a6cdef5d52c640e5725c93437.tar.bz2
Parsers may return raw data, or a DataAndFiles object
Diffstat (limited to 'djangorestframework/request.py')
-rw-r--r--djangorestframework/request.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/djangorestframework/request.py b/djangorestframework/request.py
index 84ca0575..2e4e8909 100644
--- a/djangorestframework/request.py
+++ b/djangorestframework/request.py
@@ -146,7 +146,7 @@ class Request(object):
self._load_method_and_content_type()
if not _hasattr(self, '_data'):
- (self._data, self._files) = self._parse()
+ self._data, self._files = self._parse()
def _load_method_and_content_type(self):
"""
@@ -201,11 +201,11 @@ class Request(object):
self._CONTENTTYPE_PARAM in self._data):
self._content_type = self._data.pop(self._CONTENTTYPE_PARAM)[0]
self._stream = StringIO(self._data.pop(self._CONTENT_PARAM)[0])
- (self._data, self._files) = self._parse()
+ self._data, self._files = self._parse()
def _parse(self):
"""
- Parse the request content.
+ Parse the request content, returning a two-tuple of (data, files)
May raise an `UnsupportedMediaType`, or `ParseError` exception.
"""
@@ -214,8 +214,14 @@ class Request(object):
for parser in self.get_parsers():
if parser.can_handle_request(self.content_type):
- return parser.parse(self.stream, meta=self.META,
- upload_handlers=self.upload_handlers)
+ parsed = parser.parse(self.stream, meta=self.META,
+ upload_handlers=self.upload_handlers)
+ # Parser classes may return the raw data, or a
+ # DataAndFiles object. Unpack the result as required.
+ try:
+ return (parsed.data, parsed.files)
+ except AttributeError:
+ return (parsed, None)
raise UnsupportedMediaType(self._content_type)