From 7abef9ac3b3fb20a6cdef5d52c640e5725c93437 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Mon, 3 Sep 2012 14:28:40 +0100 Subject: Parsers may return raw data, or a DataAndFiles object --- djangorestframework/request.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'djangorestframework/request.py') 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) -- cgit v1.2.3