def test_get_redirect_url_max_hops_exceeded(self, mocker): url = "https://url.org" redirect_url = "https://redirect.url.org" mock = patch_url_redirection(mocker, redirect_url) with pytest.raises(RecursionError): utils._get_redirect_url(url, max_hops=0) assert mock.call_count == 1 assert mock.call_args[0][0].full_url == url
def resolve(self) -> OnlineResource: if self._resolved: return self redirect_url = _get_redirect_url(self.url) if redirect_url == self.url: self._resolved = True return self meta = { attr.lstrip("_"): getattr(self, attr) for attr in ( "file_name", "sha256", "_preprocess", ) } gdrive_id = _get_google_drive_file_id(redirect_url) if gdrive_id: return GDriveResource(gdrive_id, **meta) http_resource = HttpResource(redirect_url, **meta) http_resource._resolved = True return http_resource
def test_get_redirect_url(self, mocker): url = "https://url.org" expected_redirect_url = "https://redirect.url.org" mock = patch_url_redirection(mocker, expected_redirect_url) actual = utils._get_redirect_url(url) assert actual == expected_redirect_url assert mock.call_count == 2 call_args_1, call_args_2 = mock.call_args_list assert call_args_1[0][0].full_url == url assert call_args_2[0][0].full_url == expected_redirect_url
def inner_wrapper(request, *args, **kwargs): initial_url = request.full_url if isinstance(request, Request) else request url = _get_redirect_url(initial_url, max_hops=max_hops) if url == initial_url: return fn(request, *args, **kwargs) warnings.warn(f"The URL {initial_url} ultimately redirects to {url}.") if not isinstance(request, Request): return fn(url, *args, **kwargs) request_attrs = { attr: getattr(request, attr) for attr in ("data", "headers", "origin_req_host", "unverifiable") } # the 'method' attribute does only exist if the request was created with it if hasattr(request, "method"): request_attrs["method"] = request.method return fn(Request(url, **request_attrs), *args, **kwargs)
def test_get_redirect_url_max_hops_exceeded(self): url = "http://www.vision.caltech.edu/visipedia-data/CUB-200-2011/CUB_200_2011.tgz" with pytest.raises(RecursionError): utils._get_redirect_url(url, max_hops=0)
def test_get_redirect_url(self): url = "http://www.vision.caltech.edu/visipedia-data/CUB-200-2011/CUB_200_2011.tgz" expected = "https://drive.google.com/file/d/1hbzc_P1FuxMkcabkgn9ZKinBwW683j45/view" actual = utils._get_redirect_url(url) assert actual == expected