Skip to content

Commit d9eb7dc

Browse files
committed
feat: cdn fallbacks
1 parent 4928e46 commit d9eb7dc

1 file changed

Lines changed: 33 additions & 18 deletions

File tree

gogdl/dl/workers/task_executor.py

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -110,27 +110,45 @@ def run(self):
110110
self.session.close()
111111
self.shared_memory.close()
112112

113-
def v2(self, task: DownloadTask2):
114-
retries = 5
115-
urls = self.secure_links[task.product_id]
116-
117-
compressed_md5 = task.compressed_sum
118-
119-
endpoint = copy(urls[0])
113+
def _get_download_url_v2(self, task, urls, index):
114+
if len(urls) <= index:
115+
index = len(urls) - 1
116+
endpoint = copy(urls[index])
120117
if task.product_id != 'redist':
121-
endpoint["parameters"]["path"] += f"/{dl_utils.galaxy_path(compressed_md5)}"
118+
endpoint["parameters"]["path"] += f"/{dl_utils.galaxy_path(task.compressed_sum)}"
122119
url = dl_utils.merge_url_with_params(
123120
endpoint["url_format"], endpoint["parameters"]
124121
)
125122
else:
126-
endpoint["url"] += "/" + dl_utils.galaxy_path(compressed_md5)
123+
endpoint["url"] += "/" + dl_utils.galaxy_path(task.compressed_sum)
127124
url = endpoint["url"]
125+
return url
126+
127+
def _get_download_url_v1(self, urls):
128+
if type(urls) == str:
129+
url = urls
130+
else:
131+
endpoint = copy(urls[0])
132+
endpoint["parameters"]["path"] += "/main.bin"
133+
url = dl_utils.merge_url_with_params(
134+
endpoint["url_format"], endpoint["parameters"]
135+
)
136+
return url
137+
138+
def v2(self, task: DownloadTask2):
139+
retries = 5
140+
urls = self.secure_links[task.product_id]
141+
142+
compressed_md5 = task.compressed_sum
143+
preferred_endpoint = 0
144+
url = self._get_download_url_v2(task, urls, preferred_endpoint)
128145

129146
buffer = bytes()
130147
compressed_sum = hashlib.md5()
131148
download_size = 0
132149
response = None
133150
while retries > 0:
151+
response = None
134152
buffer = bytes()
135153
compressed_sum = hashlib.md5()
136154
download_size = 0
@@ -147,10 +165,13 @@ def v2(self, task: DownloadTask2):
147165

148166
except Exception as e:
149167
print("Connection failed", e)
150-
if response and response.status_code == 401:
168+
if response and response.status_code in [401, 403]:
151169
self.results_queue.put(DownloadTaskResult(False, FailReason.UNAUTHORIZED, task))
152170
print("Connection failed, unauthorized")
153171
return
172+
elif response and response.status_code > 403:
173+
preferred_endpoint+=1
174+
url = self._get_download_url_v2(task, urls, preferred_endpoint)
154175
retries -= 1
155176
time.sleep(2)
156177
continue
@@ -180,18 +201,12 @@ def v1(self, task: DownloadTask1):
180201
urls = self.secure_links[task.product_id]
181202

182203
response = None
183-
if type(urls) == str:
184-
url = urls
185-
else:
186-
endpoint = copy(urls[0])
187-
endpoint["parameters"]["path"] += "/main.bin"
188-
url = dl_utils.merge_url_with_params(
189-
endpoint["url_format"], endpoint["parameters"]
190-
)
204+
url = self._get_download_url_v1(urls)
191205
range_header = dl_utils.get_range_header(task.offset, task.size)
192206

193207
buffer = bytes()
194208
while retries > 0:
209+
response = None
195210
buffer = bytes()
196211
try:
197212
response = self.session.get(url, stream=True, timeout=10, headers={'Range': range_header})

0 commit comments

Comments
 (0)