diff options
| author | Tom Christie | 2012-09-03 14:28:40 +0100 |
|---|---|---|
| committer | Tom Christie | 2012-09-03 14:28:40 +0100 |
| commit | 7abef9ac3b3fb20a6cdef5d52c640e5725c93437 (patch) | |
| tree | 2cd3270b7079f8b20eb3e3e90d8181c37c4199cb /djangorestframework/request.py | |
| parent | d180e984e9779673c2d8aab3c65b4763432ba6b5 (diff) | |
| download | django-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.py | 16 |
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) |
