diff options
| author | Tom Christie | 2013-08-29 12:55:56 +0100 |
|---|---|---|
| committer | Tom Christie | 2013-08-29 12:55:56 +0100 |
| commit | 37e2720a40d39688f5e6ebb3b5c5aad68b8c25d4 (patch) | |
| tree | e70f7d921ee811be1c5a2a54d3d51ef68807c217 /rest_framework/request.py | |
| parent | 18007d68464b0cfab970e2a60aed0d41c4de4dac (diff) | |
| download | django-rest-framework-37e2720a40d39688f5e6ebb3b5c5aad68b8c25d4.tar.bz2 | |
Add `override_method` context manager and cleanup.
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. |
