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}') )
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
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
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
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
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}'))
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}") )