aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordirkf <fieldhouse@gmx.net>2025-09-28 06:52:48 +0100
committerdirkf <fieldhouse@gmx.net>2025-09-29 02:15:05 +0100
commit40ab920354e4ec5ec153c29fddd6bb0688b324e9 (patch)
tree4a6957be6ca442562dcfa11cacd4d4918c182fa7
parent0739f58f9024a086c7d492a47368225f1c2e51fa (diff)
[downloader] Delay download according to `available_at` format key
-rw-r--r--youtube_dl/downloader/common.py28
1 files changed, 21 insertions, 7 deletions
diff --git a/youtube_dl/downloader/common.py b/youtube_dl/downloader/common.py
index 91e691776..8354030a9 100644
--- a/youtube_dl/downloader/common.py
+++ b/youtube_dl/downloader/common.py
@@ -11,6 +11,7 @@ from ..utils import (
decodeArgument,
encodeFilename,
error_to_compat_str,
+ float_or_none,
format_bytes,
shell_quote,
timeconvert,
@@ -367,14 +368,27 @@ class FileDownloader(object):
})
return True
- min_sleep_interval = self.params.get('sleep_interval')
- if min_sleep_interval:
- max_sleep_interval = self.params.get('max_sleep_interval', min_sleep_interval)
- sleep_interval = random.uniform(min_sleep_interval, max_sleep_interval)
+ min_sleep_interval, max_sleep_interval = (
+ float_or_none(self.params.get(interval), default=0)
+ for interval in ('sleep_interval', 'max_sleep_interval'))
+
+ sleep_note = ''
+ available_at = info_dict.get('available_at')
+ if available_at:
+ forced_sleep_interval = available_at - int(time.time())
+ if forced_sleep_interval > min_sleep_interval:
+ sleep_note = 'as required by the site'
+ min_sleep_interval = forced_sleep_interval
+ if forced_sleep_interval > max_sleep_interval:
+ max_sleep_interval = forced_sleep_interval
+
+ sleep_interval = random.uniform(
+ min_sleep_interval, max_sleep_interval or min_sleep_interval)
+
+ if sleep_interval > 0:
self.to_screen(
- '[download] Sleeping %s seconds...' % (
- int(sleep_interval) if sleep_interval.is_integer()
- else '%.2f' % sleep_interval))
+ '[download] Sleeping %.2f seconds %s...' % (
+ sleep_interval, sleep_note))
time.sleep(sleep_interval)
return self.real_download(filename, info_dict)