[downloader] Delay download according to available_at format key

This commit is contained in:
dirkf
2025-09-28 06:52:48 +01:00
parent 0739f58f90
commit 40ab920354

View File

@@ -11,6 +11,7 @@ from ..utils import (
decodeArgument, decodeArgument,
encodeFilename, encodeFilename,
error_to_compat_str, error_to_compat_str,
float_or_none,
format_bytes, format_bytes,
shell_quote, shell_quote,
timeconvert, timeconvert,
@@ -367,14 +368,27 @@ class FileDownloader(object):
}) })
return True return True
min_sleep_interval = self.params.get('sleep_interval') min_sleep_interval, max_sleep_interval = (
if min_sleep_interval: float_or_none(self.params.get(interval), default=0)
max_sleep_interval = self.params.get('max_sleep_interval', min_sleep_interval) for interval in ('sleep_interval', 'max_sleep_interval'))
sleep_interval = random.uniform(min_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( self.to_screen(
'[download] Sleeping %s seconds...' % ( '[download] Sleeping %.2f seconds %s...' % (
int(sleep_interval) if sleep_interval.is_integer() sleep_interval, sleep_note))
else '%.2f' % sleep_interval))
time.sleep(sleep_interval) time.sleep(sleep_interval)
return self.real_download(filename, info_dict) return self.real_download(filename, info_dict)