aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Finucane <stephen@that.guru>2017-05-19 15:53:22 +0100
committerStephen Finucane <stephen@that.guru>2017-12-03 20:54:42 +0000
commitda72db5d8a3d27092567a19219bd48c33ab8dbc4 (patch)
treefa6b3aee36756a5ddd0fd75f798253ce053b8292
parent4baf00b69be1b1160dff2f18a8b7e0764b1d2613 (diff)
downloadpatchwork-da72db5d8a3d27092567a19219bd48c33ab8dbc4.tar
patchwork-da72db5d8a3d27092567a19219bd48c33ab8dbc4.tar.gz
REST: Allow for mutability of request.POST
Using Django 1.11 yields the following error for the 'patchwork.tests .test_rest_api.TestCheckAPI.test_create' test: AttributeError: This QueryDict instance is immutable This occurs due to our modification of data to allow users to create instances using a slugified state instead of the underlying integer value, e.g. 'success' instead of 1. Resolve this by unsetting the immutability of that queryset. As suggested in the linked SO answer, there is limited side effects to doing this. Signed-off-by: Stephen Finucane <stephen@that.guru> Tested-by: Daniel Axtens <dja@axtens.net>
-rw-r--r--patchwork/api/check.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/patchwork/api/check.py b/patchwork/api/check.py
index 5b38150..b37d6e0 100644
--- a/patchwork/api/check.py
+++ b/patchwork/api/check.py
@@ -49,7 +49,16 @@ class CheckSerializer(HyperlinkedModelSerializer):
def run_validation(self, data):
for val, label in Check.STATE_CHOICES:
if label == data['state']:
+ # NOTE(stephenfin): 'data' is essentially 'request.POST', which
+ # is immutable by default. However, there's no good reason for
+ # this to be this way [1], so temporarily unset that mutability
+ # to fix what we need to here.
+ #
+ # [1] http://stackoverflow.com/a/12619745/613428
+ mutable = data._mutable # noqa
+ data._mutable = True # noqa
data['state'] = val
+ data._mutable = mutable # noqa
break
return super(CheckSerializer, self).run_validation(data)