def test_parse_complex_accept_header(self):
        """
        The accept header should be parsed into a list of sets of MediaType.
        The list is an ordering of precedence.

        Note that we disregard 'q' values when determining precedence, and
        instead differentiate equal values by using the server preference.
        """
        header = 'application/xml; schema=foo, application/json; q=0.9, application/xml, */*'
        parsed = parse_accept_header(header)
        self.assertEqual(parsed, [
            set([MediaType('application/xml; schema=foo')]),
            set([MediaType('application/json; q=0.9'), MediaType('application/xml')]),
            set([MediaType('*/*')]),
        ])
예제 #2
0
    def test_parse_complex_accept_header(self):
        """
        The accept header should be parsed into a list of sets of MediaType.
        The list is an ordering of precedence.

        Note that we disregard 'q' values when determining precedence, and
        instead differentiate equal values by using the server preference.
        """
        header = 'application/xml; schema=foo, application/json; q=0.9, application/xml, */*'
        parsed = parse_accept_header(header)
        assert parsed == [
            set([MediaType('application/xml; schema=foo')]),
            set([MediaType('application/json; q=0.9'), MediaType('application/xml')]),
            set([MediaType('*/*')]),
        ]
예제 #3
0
 def test_parse_complex_accept_header(self):
     """
     The accept header should be parsed into a list of sets of MediaType.
     The list is an ordering of precedence and sublists are in the order
     of quality.
     """
     header = 'application/xml; schema=foo, application/json; q=0.9, application/xml, */*'
     parsed = parse_accept_header(header)
     self.assertEqual(parsed, [
         [MediaType('application/xml; schema=foo')],
         [
             MediaType('application/xml'),
             MediaType('application/json; q=0.9')
         ],
         [MediaType('*/*')],
     ])
예제 #4
0
    def select_renderer(self, renderers):
        """
        Determine which renderer to use for rendering the response body.
        Returns a two-tuple of (renderer, content type).
        """
        accept_header = request.headers.get('Accept', '*/*')

        for client_media_types in parse_accept_header(accept_header):
            for renderer in renderers:
                server_media_type = MediaType(renderer.media_type)
                for client_media_type in client_media_types:
                    if client_media_type.satisfies(server_media_type):
                        if server_media_type.precedence > client_media_type.precedence:
                            return (renderer, server_media_type)
                        else:
                            return (renderer, client_media_type)

        raise exceptions.NotAcceptable()
예제 #5
0
    def select_renderer(self, renderers):
        """
        Determine which renderer to use for rendering the response body.
        Returns a two-tuple of (renderer, content type).
        """
        accept_header = request.headers.get("Accept", "*/*")

        for client_media_types in parse_accept_header(accept_header):
            for renderer in renderers:
                server_media_type = MediaType(renderer.media_type)
                for client_media_type in client_media_types:
                    if client_media_type.satisfies(server_media_type):
                        if server_media_type.precedence > client_media_type.precedence:
                            return (renderer, server_media_type)
                        else:
                            return (renderer, client_media_type)

        raise exceptions.NotAcceptable()
 def test_parse_simple_accept_header(self):
     parsed = parse_accept_header('*/*, application/json')
     self.assertEqual(parsed, [
         set([MediaType('application/json')]),
         set([MediaType('*/*')])
     ])
예제 #7
0
 def test_parse_simple_accept_header(self):
     parsed = parse_accept_header('*/*, application/json')
     self.assertEqual(
         parsed,
         [set([MediaType('application/json')]),
          set([MediaType('*/*')])])