aboutsummaryrefslogtreecommitdiffstats
path: root/yt_dlp/utils.py
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2022-03-03 02:42:52 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2022-03-03 02:43:16 +0530
commitf1d130902b4ae57f8223798a2472bfedea4203b8 (patch)
treee85606b5f5f0caf45157180177fc87c0f64a6207 /yt_dlp/utils.py
parentc2ae48dbd5142d91122c7f0233a720a9dc4348b1 (diff)
downloadhypervideo-pre-f1d130902b4ae57f8223798a2472bfedea4203b8.tar.lz
hypervideo-pre-f1d130902b4ae57f8223798a2472bfedea4203b8.tar.xz
hypervideo-pre-f1d130902b4ae57f8223798a2472bfedea4203b8.zip
[utils] OnDemandPagedList: Do not download pages after error
Diffstat (limited to 'yt_dlp/utils.py')
-rw-r--r--yt_dlp/utils.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index cc08bd130..1532210f3 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -2799,13 +2799,14 @@ class PagedList:
def __init__(self, pagefunc, pagesize, use_cache=True):
self._pagefunc = pagefunc
self._pagesize = pagesize
+ self._pagecount = float('inf')
self._use_cache = use_cache
self._cache = {}
def getpage(self, pagenum):
page_results = self._cache.get(pagenum)
if page_results is None:
- page_results = list(self._pagefunc(pagenum))
+ page_results = [] if pagenum > self._pagecount else list(self._pagefunc(pagenum))
if self._use_cache:
self._cache[pagenum] = page_results
return page_results
@@ -2817,7 +2818,7 @@ class PagedList:
raise NotImplementedError('This method must be implemented by subclasses')
def __getitem__(self, idx):
- # NOTE: cache must be enabled if this is used
+ assert self._use_cache, 'Indexing PagedList requires cache'
if not isinstance(idx, int) or idx < 0:
raise TypeError('indices must be non-negative integers')
entries = self.getslice(idx, idx + 1)
@@ -2843,7 +2844,11 @@ class OnDemandPagedList(PagedList):
if (end is not None and firstid <= end <= nextfirstid)
else None)
- page_results = self.getpage(pagenum)
+ try:
+ page_results = self.getpage(pagenum)
+ except Exception:
+ self._pagecount = pagenum - 1
+ raise
if startv != 0 or endv is not None:
page_results = page_results[startv:endv]
yield from page_results
@@ -2863,8 +2868,8 @@ class OnDemandPagedList(PagedList):
class InAdvancePagedList(PagedList):
def __init__(self, pagefunc, pagecount, pagesize):
- self._pagecount = pagecount
PagedList.__init__(self, pagefunc, pagesize, True)
+ self._pagecount = pagecount
def _getslice(self, start, end):
start_page = start // self._pagesize