Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9338888
D6252.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
1 KB
Subscribers
None
D6252.diff
View Options
diff --git a/swh/loader/package/tests/test_utils.py b/swh/loader/package/tests/test_utils.py
--- a/swh/loader/package/tests/test_utils.py
+++ b/swh/loader/package/tests/test_utils.py
@@ -171,6 +171,33 @@
download(url, dest=str(tmp_path))
+@pytest.mark.fs
+def test_download_with_redirection(tmp_path, requests_mock):
+ """Download with redirection should use the targeted URL to extract filename"""
+ url = "https://example.org/project/requests/download"
+ filename = "requests-0.0.1.tar.gz"
+ redirection_url = f"https://example.org/project/requests/files/{filename}"
+ data = "this is something"
+
+ requests_mock.get(url, status_code=302, headers={"location": redirection_url})
+ requests_mock.get(
+ redirection_url, text=data, headers={"content-length": str(len(data))}
+ )
+
+ actual_filepath, actual_hashes = download(url, dest=str(tmp_path))
+
+ actual_filename = os.path.basename(actual_filepath)
+ assert actual_filename == filename
+ assert actual_hashes["length"] == len(data)
+ assert (
+ actual_hashes["checksums"]["sha1"] == "fdd1ce606a904b08c816ba84f3125f2af44d92b2"
+ ) # noqa
+ assert (
+ actual_hashes["checksums"]["sha256"]
+ == "1d9224378d77925d612c9f926eb9fb92850e6551def8328011b6a972323298d5"
+ )
+
+
def test_api_info_failure(requests_mock):
"""Failure to fetch info/release information should raise"""
url = "https://pypi.org/pypi/requests/json"
diff --git a/swh/loader/package/utils.py b/swh/loader/package/utils.py
--- a/swh/loader/package/utils.py
+++ b/swh/loader/package/utils.py
@@ -92,6 +92,9 @@
raise ValueError(
"Fail to query '%s'. Reason: %s" % (url, response.status_code)
)
+ # update URL to response one as requests follow redirection by default
+ # on GET requests
+ url = response.url
response_data = response.iter_content(chunk_size=HASH_BLOCK_SIZE)
filename = filename if filename else os.path.basename(url)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Jul 3 2025, 9:13 AM (6 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3225496
Attached To
D6252: package/utils: Improve downloaded filename extraction
Event Timeline
Log In to Comment