aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/request.py
diff options
context:
space:
mode:
authorTom Christie2013-12-03 08:58:05 +0000
committerTom Christie2013-12-03 08:58:05 +0000
commitc1d9a96df03ea81454d7d0e3583c68e270ed5043 (patch)
tree6f852e92b576ab0e77f300f9de48e5bb55586000 /rest_framework/request.py
parentfe4c7d4000675a1720e7d3e02c3014a693d835aa (diff)
downloaddjango-rest-framework-c1d9a96df03ea81454d7d0e3583c68e270ed5043.tar.bz2
Catch errors during parsing and set empty .DATA/.FILES before re-raising.
Diffstat (limited to 'rest_framework/request.py')
-rw-r--r--rest_framework/request.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/rest_framework/request.py b/rest_framework/request.py
index b883d0d4..9b551aa8 100644
--- a/rest_framework/request.py
+++ b/rest_framework/request.py
@@ -356,7 +356,16 @@ class Request(object):
if not parser:
raise exceptions.UnsupportedMediaType(media_type)
- parsed = parser.parse(stream, media_type, self.parser_context)
+ try:
+ parsed = parser.parse(stream, media_type, self.parser_context)
+ except:
+ # If we get an exception during parsing, fill in empty data and
+ # re-raise. Ensures we don't simply repeat the error when
+ # attempting to render the browsable renderer response, or when
+ # logging the request or similar.
+ self._data = QueryDict('', self._request._encoding)
+ self._files = MultiValueDict()
+ raise
# Parser classes may return the raw data, or a
# DataAndFiles object. Unpack the result as required.