diff options
| author | Tom Christie | 2013-08-30 09:28:33 +0100 |
|---|---|---|
| committer | Tom Christie | 2013-08-30 09:28:33 +0100 |
| commit | 9a5b2eefa92dede844ab94d049093e91ac98af5b (patch) | |
| tree | faf389e2f8c8296aeaa486ab97ed0be9113cc2ba /rest_framework/request.py | |
| parent | bf07b8e616bd92e4ae3c2c09b198181d7075e6bd (diff) | |
| parent | f3ab0b2b1d5734314dbe3cdd13cd7c4f0531bf7d (diff) | |
| download | django-rest-framework-9a5b2eefa92dede844ab94d049093e91ac98af5b.tar.bz2 | |
Merge master
Diffstat (limited to 'rest_framework/request.py')
| -rw-r--r-- | rest_framework/request.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/rest_framework/request.py b/rest_framework/request.py index 919716f4..977d4d96 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -28,6 +28,29 @@ def is_form_media_type(media_type): base_media_type == 'multipart/form-data') +class override_method(object): + """ + A context manager that temporarily overrides the method on a request, + additionally setting the `view.request` attribute. + + Usage: + + with override_method(view, request, 'POST') as request: + ... # Do stuff with `view` and `request` + """ + def __init__(self, view, request, method): + self.view = view + self.request = request + self.method = method + + def __enter__(self): + self.view.request = clone_request(self.request, self.method) + return self.view.request + + def __exit__(self, *args, **kwarg): + self.view.request = self.request + + class Empty(object): """ Placeholder for unset attributes. |
