diff options
| author | Tom Christie | 2012-10-17 22:19:59 +0100 | 
|---|---|---|
| committer | Tom Christie | 2012-10-17 22:19:59 +0100 | 
| commit | 4231995fbd80e45991975ab81d9e570a9f4b72d0 (patch) | |
| tree | 6aedfb8cdad5ec1500a4dddcd9bb49026a836255 | |
| parent | 99d48f90030d174ef80498b48f56af6489865f0d (diff) | |
| download | django-rest-framework-4231995fbd80e45991975ab81d9e570a9f4b72d0.tar.bz2 | |
parser_context includes `view`, `request`, `args`, `kwargs`.  (Not `meta` and `upload_handlers`)
Consistency with renderer API.
| -rw-r--r-- | docs/api-guide/parsers.md | 4 | ||||
| -rw-r--r-- | docs/api-guide/renderers.md | 5 | ||||
| -rw-r--r-- | rest_framework/parsers.py | 6 | ||||
| -rw-r--r-- | rest_framework/request.py | 9 | ||||
| -rw-r--r-- | rest_framework/views.py | 15 | 
5 files changed, 22 insertions, 17 deletions
| diff --git a/docs/api-guide/parsers.md b/docs/api-guide/parsers.md index a950c0e0..70abad9b 100644 --- a/docs/api-guide/parsers.md +++ b/docs/api-guide/parsers.md @@ -103,7 +103,9 @@ A stream-like object representing the body of the request.  ### parser_context -If supplied, this argument will be a dictionary containing any additional context that may be required to parse the request content.  By default it includes the keys `'upload_handlers'` and `'meta'`, which contain the values of the `request.upload_handlers` and `request.meta` properties. +Optional.  If supplied, this argument will be a dictionary containing any additional context that may be required to parse the request content. + +By default this will include the following keys: `view`, `request`, `args`, `kwargs`.  ## Example diff --git a/docs/api-guide/renderers.md b/docs/api-guide/renderers.md index c8addb32..24cca181 100644 --- a/docs/api-guide/renderers.md +++ b/docs/api-guide/renderers.md @@ -162,11 +162,14 @@ The request data, as set by the `Response()` instantiation.  ### `media_type=None` -Optional. If provided, this is the accepted media type, as determined by the content negotiation stage.  Depending on the client's `Accept:` header, this may be more specific than the renderer's `media_type` attribute, and may include media type parameters.  For example `"application/json; nested=true"`. +Optional. If provided, this is the accepted media type, as determined by the content negotiation stage. + +Depending on the client's `Accept:` header, this may be more specific than the renderer's `media_type` attribute, and may include media type parameters.  For example `"application/json; nested=true"`.  ### `renderer_context=None`  Optional. If provided, this is a dictionary of contextual information provided by the view. +  By default this will include the following keys: `view`, `request`, `response`, `args`, `kwargs`.  ## Example diff --git a/rest_framework/parsers.py b/rest_framework/parsers.py index 6287b842..7e13c3d8 100644 --- a/rest_framework/parsers.py +++ b/rest_framework/parsers.py @@ -119,8 +119,10 @@ class MultiPartParser(BaseParser):          `.files` will be a `QueryDict` containing all the form files.          """          parser_context = parser_context or {} -        meta = parser_context['meta'] -        upload_handlers = parser_context['upload_handlers'] +        request = parser_context['request'] +        meta = request.META +        upload_handlers = request.upload_handlers +          try:              parser = DjangoMultiPartParser(meta, stream, upload_handlers)              data, files = parser.parse() diff --git a/rest_framework/request.py b/rest_framework/request.py index 6f9cf09a..d739d27d 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -88,17 +88,12 @@ class Request(object):          self._stream = Empty          if self.parser_context is None: -            self.parser_context = self._default_parser_context(request) +            self.parser_context = {} +        self.parser_context['request'] = self      def _default_negotiator(self):          return api_settings.DEFAULT_CONTENT_NEGOTIATION() -    def _default_parser_context(self, request): -        return { -            'upload_handlers': request.upload_handlers, -            'meta': request.META, -        } -      @property      def method(self):          """ diff --git a/rest_framework/views.py b/rest_framework/views.py index 1be2593c..066c0bb9 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -161,9 +161,12 @@ class APIView(View):          Returns a dict that is passed through to Parser.parse(),          as the `parser_context` keyword argument.          """ +        # Note: Additionally `request` will also be added to the context +        #       by the Request object.          return { -            'upload_handlers': http_request.upload_handlers, -            'meta': http_request.META, +            'view': self, +            'args': getattr(self, 'args', ()), +            'kwargs': getattr(self, 'kwargs', {})          }      def get_renderer_context(self): @@ -171,13 +174,13 @@ class APIView(View):          Returns a dict that is passed through to Renderer.render(),          as the `renderer_context` keyword argument.          """ -        # Note: Additionally 'response' will also be set on the context, +        # Note: Additionally 'response' will also be added to the context,          #       by the Response object.          return {              'view': self, -            'request': self.request, -            'args': self.args, -            'kwargs': self.kwargs +            'args': getattr(self, 'args', ()), +            'kwargs': getattr(self, 'kwargs', {}), +            'request': getattr(self, 'request', None)          }      # API policy instantiation methods | 
