Пример #1
0
    def determine_version(self, request, *args, **kwargs):
        """Use either Accept header or query parameter for versioning."""

        # Patterned after rest_framework.versioning.AcceptHeaderVersioning
        media_type = _MediaType(request.accepted_media_type)
        header_version = media_type.params.get(self.header_version_param, None)
        if header_version is not None:
            header_version = unicode_http_header(header_version)

        # Patterned after rest_framework.versioning.QueryParameterVersioning
        query_version = request.query_params.get(self.query_version_param,
                                                 None)

        if header_version is not None and query_version is not None and header_version != query_version:
            raise APIVersionMismatch()
        if header_version is not None and not self.is_allowed_version(
                header_version):
            # Behave like AcceptHeaderVersioning
            raise exceptions.NotAcceptable(self.invalid_version_in_header)
        if query_version is not None and not self.is_allowed_version(
                query_version):
            # Behave like QueryParameterVersioning
            raise exceptions.NotFound(self.invalid_version_in_query)
        version = header_version or query_version or self.default_version
        # self.default_version is always allowed, no need to re-check is_allowed_version here
        return version
Пример #2
0
 def determine_version(self, request, *args, **kwargs):
     media_type = _MediaType(request.accepted_media_type)
     version = media_type.params.get(self.version_param, self.default_version)
     version = unicode_http_header(version)
     if not self.is_allowed_version(version):
         raise exceptions.NotAcceptable(self.invalid_version_message)
     return version
Пример #3
0
    def determine_version(self, request, *args, **kwargs):
        media_type = _MediaType(request.META.get('HTTP_ACCEPT'))
        version = media_type.params.get(self.version_param, 0)
        version = unicode_http_header(version)

        if not version and request.path.startswith('/schema'):
            version = request.GET.get('version', self.allowed_versions[-1])

        if version not in self.allowed_versions:
            raise exceptions.NotAcceptable({
                'detail': "Invalid version in 'Accept' header.",
                'allowed_versions': [
                    int(v) for v in self.allowed_versions
                ],
                'valid_content_types': [
                    media_type_format_json,
                    media_type_format_xml,
                    media_type_format_yaml,
                ],
                'example_header': (
                    f'Accept: {media_type_format_json}; '
                    f'version={self.allowed_versions[-1]}'
                )
            })
        request.version = version
        return version
Пример #4
0
 def determine_version(self, request, *args, **kwargs):
     version = request.META.get('HTTP_API_VERSION')
     if version == None:
         version = settings.DEFAULT_API_VERSION
     version = unicode_http_header(version)
     if not self.is_allowed_version(version):
         raise exceptions.NotAcceptable(self.invalid_version_message)
     return version
Пример #5
0
 def get_header_version(self, request):
     invalid_version_message = 'Invalid version in "Accept" header.'
     media_type = _MediaType(request.accepted_media_type)
     version = media_type.params.get(self.version_param)
     if not version:
         return None
     version = unicode_http_header(version)
     if not self.is_allowed_version(version):
         raise drf_exceptions.NotAcceptable(invalid_version_message)
     return version
Пример #6
0
 def get_header_version(self, request):
     invalid_version_message = 'Invalid version in "Accept" header.'
     media_type = _MediaType(request.accepted_media_type)
     version = media_type.params.get(self.version_param)
     if not version:
         return None
     version = unicode_http_header(version)
     if not self.is_allowed_version(version):
         raise drf_exceptions.NotAcceptable(invalid_version_message)
     return version
Пример #7
0
    def determine_version(self, request, *args, **kwargs):
        major_version = super(APlusVersioning, self).determine_version(request, *args, **kwargs)
        api_version = self.allowed_versions[major_version]

        ## get and update version in request media type
        # this is only location where need to check the requested version and we
        # update the version so the respond content type has the correct version
        media_type = _MediaType(request.accepted_media_type)
        accept_version = unicode_http_header(media_type.params.get(self.version_param, ''))
        media_type.params[self.version_param] = api_version
        request.accepted_media_type = str(media_type)

        if accept_version:
            accept_major_version = accept_version.split('.', 1)[0]
            if accept_major_version != major_version or _version(api_version) < _version(accept_version):
                raise exceptions.NotAcceptable(self.invalid_accept_version_message)

        return major_version
Пример #8
0
    def determine_version(self, request, *args, **kwargs):
        major_version = super(APlusVersioning,
                              self).determine_version(request, *args, **kwargs)
        api_version = self.allowed_versions[major_version]

        ## get and update version in request media type
        # this is only location where need to check the requested version and we
        # update the version so the respond content type has the correct version
        media_type = _MediaType(request.accepted_media_type)
        accept_version = unicode_http_header(
            media_type.params.get(self.version_param, ''))
        media_type.params[self.version_param] = api_version
        request.accepted_media_type = str(media_type)

        if accept_version:
            accept_major_version = accept_version.split('.', 1)[0]
            if accept_major_version != major_version or _version(
                    api_version) < _version(accept_version):
                raise exceptions.NotAcceptable(
                    self.invalid_accept_version_message)

        return major_version
Пример #9
0
 def __init__(self, *args, **kwargs):
     super(_MediaType, self).__init__(*args, **kwargs)
     self.params = dict(
         ((k, unicode_http_header(v)) for k, v in self.params.items()))
Пример #10
0
 def __init__(self, *args, **kwargs):
     super(_MediaType, self).__init__(*args, **kwargs)
     self.params = dict(((k, unicode_http_header(v)) for k, v in self.params.items()))
Пример #11
0
def determine_version(request):
    media_type = _MediaType(request.META.get("HTTP_ACCEPT"))
    version = media_type.params.get("version")
    version = unicode_http_header(version)
    return version or None