Exemplo n.º 1
0
 def test_partial(self):
     self.assertEqual(partial(self.uri), URITemplate(self.uri))
     uri = self.uri + '/sigmavirus24{/other}'
     self.assertEqual(
         partial(uri, endpoint='users'),
         URITemplate('https://api.github.com/users/sigmavirus24{/other}')
         )
Exemplo n.º 2
0
def modify_for_versioning(patterns, method, path, view, requested_version):
    assert view.versioning_class and view.request
    assert requested_version

    view.request.version = requested_version

    if issubclass(view.versioning_class, versioning.URLPathVersioning):
        version_param = view.versioning_class.version_param
        # substitute version variable to emulate request
        path = uritemplate.partial(path, var_dict={version_param: requested_version})
        if isinstance(path, URITemplate):
            path = path.uri
        # emulate router behaviour by injecting substituted variable into view
        view.kwargs[version_param] = requested_version
    elif issubclass(view.versioning_class, versioning.NamespaceVersioning):
        try:
            view.request.resolver_match = get_resolver(
                urlconf=tuple(detype_pattern(p) for p in patterns)
            ).resolve(path)
        except Resolver404:
            error(f"namespace versioning path resolution failed for {path}. path will be ignored.")
    elif issubclass(view.versioning_class, versioning.AcceptHeaderVersioning):
        # Append the version into request accepted_media_type.
        # e.g "application/json; version=1.0"
        # To allow the AcceptHeaderVersioning negotiator going through.
        if not hasattr(view.request, 'accepted_renderer'):
            # Probably a mock request, content negotation was not performed, so, we do it now.
            negotiated = view.perform_content_negotiation(view.request)
            view.request.accepted_renderer, view.request.accepted_media_type = negotiated
        media_type = _MediaType(view.request.accepted_media_type)
        view.request.accepted_media_type = (
            f'{media_type.full_type}; {view.versioning_class.version_param}={requested_version}'
        )

    return path
Exemplo n.º 3
0
def modify_for_versioning(patterns, method, path, view, requested_version):
    assert view.versioning_class and view.request

    view.request.version = requested_version

    if issubclass(view.versioning_class, versioning.URLPathVersioning):
        version_param = view.versioning_class.version_param
        # substitute version variable to emulate request
        path = uritemplate.partial(path,
                                   var_dict={version_param: requested_version})
        if isinstance(path, URITemplate):
            path = path.uri
        # emulate router behaviour by injecting substituted variable into view
        view.kwargs[version_param] = requested_version
    elif issubclass(view.versioning_class, versioning.NamespaceVersioning):
        try:
            view.request.resolver_match = get_resolver(urlconf=tuple(
                detype_pattern(p) for p in patterns)).resolve(path)
        except Resolver404:
            error(
                f"namespace versioning path resolution failed for {path}. path will be ignored."
            )
    elif issubclass(view.versioning_class, versioning.AcceptHeaderVersioning):
        renderer = view.get_renderers()[0]
        view.request.META[
            'HTTP_ACCEPT'] = f'{renderer.media_type}; version={requested_version}'

        negotiated = view.perform_content_negotiation(view.request)
        view.request.accepted_renderer, view.request.accepted_media_type = negotiated

    return path
Exemplo n.º 4
0
def modify_for_versioning(patterns, method, path, view, requested_version):
    assert view.versioning_class

    from rest_framework.test import APIRequestFactory

    params = {'path': path}
    if issubclass(view.versioning_class, versioning.AcceptHeaderVersioning):
        renderer = view.get_renderers()[0]
        params['HTTP_ACCEPT'] = f'{renderer.media_type}; version={requested_version}'

    request = getattr(APIRequestFactory(), method.lower())(**params)
    view.request = request

    # wrap request in DRF's Request, necessary for content negotiation
    view.request = view.initialize_request(view.request)

    request.version = requested_version

    if issubclass(view.versioning_class, versioning.URLPathVersioning):
        version_param = view.versioning_class.version_param
        # substitute version variable to emulate request
        path = uritemplate.partial(path, var_dict={version_param: requested_version})
        if isinstance(path, URITemplate):
            path = path.uri
        # emulate router behaviour by injecting substituted variable into view
        view.kwargs[version_param] = requested_version
    elif issubclass(view.versioning_class, versioning.NamespaceVersioning):
        try:
            request.resolver_match = get_resolver(
                urlconf=tuple(detype_pattern(p) for p in patterns)
            ).resolve(path)
        except Resolver404:
            error(f"namespace versioning path resolution failed for {path}. path will be ignored.")
    elif issubclass(view.versioning_class, versioning.AcceptHeaderVersioning):
        neg = view.perform_content_negotiation(view.request)
        view.request.accepted_renderer, view.request.accepted_media_type = neg

    return path
Exemplo n.º 5
0
def modify_for_versioning(patterns, method, path, view, requested_version):
    assert view.versioning_class

    from rest_framework.test import APIRequestFactory
    mocked_request = getattr(APIRequestFactory(), method.lower())(path=path)
    view.request = mocked_request

    mocked_request.version = requested_version

    if issubclass(view.versioning_class, versioning.URLPathVersioning):
        version_param = view.versioning_class.version_param
        # substitute version variable to emulate request
        path = uritemplate.partial(path,
                                   var_dict={version_param: requested_version})
        if isinstance(path, URITemplate):
            path = path.uri
        # emulate router behaviour by injecting substituted variable into view
        view.kwargs[version_param] = requested_version
    elif issubclass(view.versioning_class, versioning.NamespaceVersioning):
        mocked_request.resolver_match = get_resolver(
            tuple(patterns)).resolve(path)

    return path
Exemplo n.º 6
0
 def test_partial(self):
     self.assertEqual(partial(self.uri), URITemplate(self.uri))
     uri = self.uri + '/sigmavirus24{/other}'
     self.assertEqual(
         partial(uri, endpoint='users'),
         URITemplate('https://api.github.com/users/sigmavirus24{/other}'))
Exemplo n.º 7
0
 def test_partial(self):
     self.assertEqual(partial(self.uri), URITemplate(self.uri))
     uri = self.uri + "/sigmavirus24{/other}"
     self.assertEqual(
         partial(uri, endpoint="users"), URITemplate("https://api.github.com/users/sigmavirus24{/other}")
     )