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. | 
