When retrieving a file from a storage location and we recieve an HTTP error (403 for example) we were failing in an unexpected location:
2024-02-26 10:27:30,985 [client:3044 - DEBUG]:
Retrying download on error: [<class 'KeyError'>] after progressing 0 bytes
Traceback (most recent call last):
File "/home/bfauble/BryansGreatWorkspace/synapsePythonClient/synapseclient/client.py", line 3020, in _downloadFileHandle
downloaded_path = self._download_from_url_multi_threaded(
File "/home/bfauble/.pyenv/versions/3.8.18/lib/python3.8/contextlib.py", line 75, in inner
return func(*args, **kwds)
File "/home/bfauble/BryansGreatWorkspace/synapsePythonClient/synapseclient/client.py", line 3092, in _download_from_url_multi_threaded
multithread_download.download_file(self, request)
File "/home/bfauble/BryansGreatWorkspace/synapsePythonClient/synapseclient/core/multithread_download/download_threads.py", line 255, in download_file
downloader.download_file(download_request)
File "/home/bfauble/BryansGreatWorkspace/synapsePythonClient/synapseclient/core/multithread_download/download_threads.py", line 304, in download_file
file_size = _get_file_size(url_info.url)
File "/home/bfauble/BryansGreatWorkspace/synapsePythonClient/synapseclient/core/multithread_download/download_threads.py", line 222, in _get_file_size
return int(res_get.headers["Content-Length"])
File "/home/bfauble/.local/share/virtualenvs/synapsePythonClient-17ZKsCr2/lib/python3.8/site-packages/requests/structures.py", line 52, in __getitem__
return self._store[key.lower()][1]
KeyError: 'content-length
Solution:
Adding in a call to check the HTTP response status code after getting a pre-signed URL.
Testing:
Unit testing
Verified with manual testing that the exception is logged with/without debug level:
Problem:
Solution:
Testing:
With debug: