Exemple #1
0
 def get_renderers(self, request):
     """
     Returns a list of renderer functions in the order they should be tried.
     
     Tries the format override parameter first, then the Accept header. If
     neither is present, attempt to fall back to self._default_format. If
     a fallback format has been specified, we try that last.
     """
     if self._format_override_parameter in request.REQUEST:
         formats = request.REQUEST[self._format_override_parameter].split(
             ',')
         renderers, seen_formats = [], set()
         for format in formats:
             if format in self._renderers_by_format and format not in seen_formats:
                 renderers.extend(self._renderers_by_format[format])
     elif request.META.get('HTTP_ACCEPT'):
         accepts = self.parse_accept_header(request.META['HTTP_ACCEPT'])
         renderers = MediaType.resolve(accepts, self._renderers)
     elif self._default_format:
         renderers = self._renderers_by_format[self._default_format]
     else:
         renderers = []
     if self._force_fallback_format:
         renderers.extend(
             self._renderers_by_format[self._force_fallback_format])
     return renderers
Exemple #2
0
    def get_renderers(self, request, context=None, template_name=None,
                      accept_header=None, formats=None, default_format=None, fallback_formats=None):
        """
        Returns a list of renderer functions in the order they should be tried.
        
        Tries the format override parameter first, then the Accept header. If
        neither is present, attempt to fall back to self._default_format. If
        a fallback format has been specified, we try that last.
        """
        if formats:
            renderers, seen_formats = [], set()
            for format in formats:
                if format in self.renderers_by_format and format not in seen_formats:
                    renderers.extend(self.renderers_by_format[format])
                    seen_formats.add(format)
        elif accept_header:
            accepts = MediaType.parse_accept_header(accept_header)
            renderers = MediaType.resolve(accepts, self.renderers)
        elif default_format:
            renderers = self.renderers_by_format[default_format]
        else:
            renderers = []

        fallback_formats = fallback_formats if isinstance(fallback_formats, (list, tuple)) else (fallback_formats,)
        for format in fallback_formats:
            renderers.extend(self.renderers_by_format[format])

        if context is not None and template_name:
            renderers = [r for r in renderers if r.test(request, context, template_name)]

        return renderers
Exemple #3
0
 def get_renderers(self, request):
     renderers = []
     if request.META.get('HTTP_NEGOTIATE'):
         negotiate = self.parse_negotiate_header(request.META['HTTP_NEGOTIATE'])
     if 'format' in request.REQUEST:
         formats = request.REQUEST[self._format_override_parameter].split(',')
         renderers, seen_formats = [], set()
         for format in formats:
             if format in self._renderers_by_format and format not in seen_formats:
                 renderers.extend(self._renderers_by_format[format])
     elif request.META.get('HTTP_ACCEPT'):
         accepts = self.parse_accept_header(request.META['HTTP_ACCEPT'])
         renderers = MediaType.resolve(accepts, tuple(self._renderers))
     elif self._default_format:
         renderers = self._renderers_by_format[self._default_format]
     if self._force_fallback_format:
         renderers.extend(self._renderers_by_format[self._force_fallback_format])
     return tuple(renderers)
Exemple #4
0
    def override_redirect(self, request, description_url, mimetypes):
        url = urlparse.urlparse(description_url)
        if 'django_hosts' in settings.INSTALLED_APPS:
            host, _ = self.hosts_middleware.get_host(url.netloc)
            urlconf = host.urlconf
        else:
            urlconf = None

        try:
            view, _, _ = resolve(url.path, urlconf)
        except Resolver404:
            return False

        should_redirect = lambda: True
        renderer = decorators.renderer(None, mimetypes, float('inf'), None)(should_redirect)

        accepts = self.parse_accept_header(request.META.get('HTTP_ACCEPT', ''))
        renderers = MediaType.resolve(accepts, (renderer,) + view.conneg.renderers)

        return renderers and renderers[0] is should_redirect
Exemple #5
0
    def override_redirect(self, request, description_url, mimetypes):
        url = urlparse.urlparse(description_url)
        if 'django_hosts' in settings.INSTALLED_APPS:
            host, _ = self.hosts_middleware.get_host(url.netloc)
            urlconf = host.urlconf
        else:
            urlconf = None

        try:
            view, _, _ = resolve(url.path, urlconf)
        except Resolver404:
            return False

        should_redirect = lambda: True
        renderer = decorators.renderer(None, mimetypes, float('inf'),
                                       None)(should_redirect)

        accepts = self.parse_accept_header(request.META.get('HTTP_ACCEPT', ''))
        renderers = MediaType.resolve(accepts,
                                      (renderer, ) + view.conneg.renderers)

        return renderers and renderers[0] is should_redirect
Exemple #6
0
    def get_renderers(self, request, context=None, template_name=None,
                      accept_header=None, formats=None, default_format=None, fallback_formats=None,
                      early=False):
        """
        Returns a list of renderer functions in the order they should be tried.
        
        Tries the format override parameter first, then the Accept header. If
        neither is present, attempt to fall back to self._default_format. If
        a fallback format has been specified, we try that last.
        
        If early is true, don't test renderers to see whether they can handle
        a serialization. This is useful if we're trying to find all relevant
        serializers before we've built a context which they will accept. 
        """
        if formats:
            renderers, seen_formats = [], set()
            for format in formats:
                if format in self.renderers_by_format and format not in seen_formats:
                    renderers.extend(self.renderers_by_format[format])
                    seen_formats.add(format)
        elif accept_header:
            accepts = MediaType.parse_accept_header(accept_header)
            renderers = MediaType.resolve(accepts, self.renderers)
        elif default_format:
            renderers = self.renderers_by_format[default_format]
        else:
            renderers = []

        fallback_formats = fallback_formats if isinstance(fallback_formats, (list, tuple)) else (fallback_formats,)
        for format in fallback_formats:
            for renderer in self.renderers_by_format[format]:
                if renderer not in renderers:
                    renderers.append(renderer)

        if not early and context is not None and template_name:
            renderers = [r for r in renderers if r.test(request, context, template_name)]

        return renderers
Exemple #7
0
 def get_renderers(self, request):
     """
     Returns a list of renderer functions in the order they should be tried.
     
     Tries the format override parameter first, then the Accept header. If
     neither is present, attempt to fall back to self._default_format. If
     a fallback format has been specified, we try that last.
     """
     if self._format_override_parameter in request.REQUEST:
         formats = request.REQUEST[self._format_override_parameter].split(',')
         renderers, seen_formats = [], set()
         for format in formats:
             if format in self._renderers_by_format and format not in seen_formats:
                 renderers.extend(self._renderers_by_format[format])
     elif request.META.get('HTTP_ACCEPT'):
         accepts = self.parse_accept_header(request.META['HTTP_ACCEPT'])
         renderers = MediaType.resolve(accepts, self._renderers)
     elif self._default_format:
         renderers = self._renderers_by_format[self._default_format]
     else:
         renderers = []
     if self._force_fallback_format:
         renderers.extend(self._renderers_by_format[self._force_fallback_format])
     return renderers