Skip to content

Commit 402f536

Browse files
committed
[dl:ytdl] implement 'retry' functionality (#1131 #8269)
for 'info_dict' extraction and file download
1 parent 1f65772 commit 402f536

File tree

1 file changed

+35
-16
lines changed

1 file changed

+35
-16
lines changed

gallery_dl/downloader/ytdl.py

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ def __init__(self, job):
2222
DownloaderBase.__init__(self, job)
2323

2424
extractor = job.extractor
25-
retries = self.config("retries", extractor._retries)
25+
self.retries = self.config("retries", extractor._retries)
2626
self.ytdl_opts = {
27-
"retries": retries+1 if retries >= 0 else float("inf"),
27+
"retries": self.retries+1 if self.retries >= 0 else float("inf"),
2828
"socket_timeout": self.config("timeout", extractor._timeout),
2929
"nocheckcertificate": not self.config("verify", extractor._verify),
3030
"proxy": self.proxies.get("http") if self.proxies else None,
@@ -77,19 +77,26 @@ def download(self, url, pathfmt):
7777
for cookie in self.session.cookies:
7878
set_cookie(cookie)
7979

80+
tries = 0
8081
url = url[5:]
8182
manifest = kwdict.get("_ytdl_manifest")
82-
try:
83-
if manifest is None:
84-
info_dict = self._extract_url(
85-
ytdl_instance, url)
86-
else:
87-
info_dict = self._extract_manifest(
88-
ytdl_instance, url, kwdict)
89-
except Exception as exc:
90-
self.log.traceback(exc)
91-
self.log.warning("%s: %s", exc.__class__.__name__, exc)
92-
return False
83+
while True:
84+
try:
85+
if manifest is None:
86+
info_dict = self._extract_url(
87+
ytdl_instance, url)
88+
else:
89+
info_dict = self._extract_manifest(
90+
ytdl_instance, url, kwdict)
91+
break
92+
except Exception as exc:
93+
tries += 1
94+
self.log.traceback(exc)
95+
self.log.error("%s: %s (%s/%s)",
96+
exc.__class__.__name__, exc,
97+
tries, self.retries+1)
98+
if tries > self.retries:
99+
return False
93100

94101
if "__gdl_initialize" in ytdl_instance.params:
95102
del ytdl_instance.params["__gdl_initialize"]
@@ -102,9 +109,21 @@ def download(self, url, pathfmt):
102109
if extra := kwdict.get("_ytdl_extra"):
103110
info_dict.update(extra)
104111

105-
if "entries" in info_dict:
106-
return self._download_playlist(ytdl_instance, pathfmt, info_dict)
107-
return self._download_video(ytdl_instance, pathfmt, info_dict)
112+
while True:
113+
try:
114+
if "entries" in info_dict:
115+
return self._download_playlist(
116+
ytdl_instance, pathfmt, info_dict)
117+
return self._download_video(
118+
ytdl_instance, pathfmt, info_dict)
119+
except Exception as exc:
120+
tries += 1
121+
self.log.traceback(exc)
122+
self.log.error("%s: %s (%s/%s)",
123+
exc.__class__.__name__, exc,
124+
tries, self.retries+1)
125+
if tries > self.retries:
126+
return False
108127

109128
def _extract_url(self, ytdl, url):
110129
return ytdl.extract_info(url, download=False)

0 commit comments

Comments
 (0)