Add --max-sleep-interval (Closes #9930)
authorsingh-pratyush96 <singh.pratyush96@gmail.com>
Thu, 4 Aug 2016 10:17:22 +0000 (15:47 +0530)
committerSergey M․ <dstftw@gmail.com>
Mon, 8 Aug 2016 20:32:42 +0000 (03:32 +0700)
youtube_dl/YoutubeDL.py
youtube_dl/__init__.py
youtube_dl/downloader/common.py
youtube_dl/options.py

index 6551f086f8d8985f5a33dc56906c5a5722b603bb..82b77783d27e496e04c0c743e56b750cd824e12d 100755 (executable)
@@ -249,7 +249,11 @@ class YoutubeDL(object):
     source_address:    (Experimental) Client-side IP address to bind to.
     call_home:         Boolean, true iff we are allowed to contact the
                        youtube-dl servers for debugging.
-    sleep_interval:    Number of seconds to sleep before each download.
+    sleep_interval:    Minimum number of seconds to sleep before each download.
+                       Sleep will be for a random interval if --max-sleep-interval is also passed.
+    max_sleep_interval:Max number of seconds to sleep before each download.
+                       Sleep will be for a random interval if passed along with --min-sleep-interval
+                       or --sleep-interval, otherwise ignored.
     listformats:       Print an overview of available video formats and exit.
     list_thumbnails:   Print a table of all thumbnails and exit.
     match_filter:      A function that gets called with the info_dict of
index 2b34bf9c282983ee2c53bc9d340232831a31a516..86af18d3330b640f131a9584e050a441739d0aa5 100644 (file)
@@ -145,6 +145,12 @@ def _real_main(argv=None):
         if numeric_limit is None:
             parser.error('invalid max_filesize specified')
         opts.max_filesize = numeric_limit
+    if opts.sleep_interval is not None:
+        if opts.sleep_interval < 0:
+            parser.error('sleep interval should not be negative')
+        elif opts.max_sleep_interval is not None:
+            if opts.max_sleep_interval < opts.sleep_interval:
+                parser.error('max sleep interval should not be less than sleep interval')
 
     def parse_retries(retries):
         if retries in ('inf', 'infinite'):
@@ -370,6 +376,7 @@ def _real_main(argv=None):
         'source_address': opts.source_address,
         'call_home': opts.call_home,
         'sleep_interval': opts.sleep_interval,
+        'max_sleep_interval': opts.max_sleep_interval,
         'external_downloader': opts.external_downloader,
         'list_thumbnails': opts.list_thumbnails,
         'playlist_items': opts.playlist_items,
index 1dba9f49a8b9b586b8428c6c7d65ca641de02c58..8e377c72cda5cea522ced8c158c9d186a329b109 100644 (file)
@@ -4,6 +4,7 @@ import os
 import re
 import sys
 import time
+import random
 
 from ..compat import compat_os_name
 from ..utils import (
@@ -342,8 +343,10 @@ class FileDownloader(object):
             })
             return True
 
-        sleep_interval = self.params.get('sleep_interval')
-        if sleep_interval:
+        sleep_lower_bound = self.params.get('sleep_interval')
+        if sleep_lower_bound:
+            sleep_upper_bound = self.params.get('max_sleep_interval', sleep_lower_bound)
+            sleep_interval = random.uniform(sleep_lower_bound, sleep_upper_bound)
             self.to_screen('[download] Sleeping %s seconds...' % sleep_interval)
             time.sleep(sleep_interval)
 
index 942d44912659232ad50fc3034b462a96f14cd8ae..068e824a0aa795faefa51eb14c43537e130501f8 100644 (file)
@@ -499,9 +499,17 @@ def parseOpts(overrideArguments=None):
         dest='bidi_workaround', action='store_true',
         help='Work around terminals that lack bidirectional text support. Requires bidiv or fribidi executable in PATH')
     workarounds.add_option(
-        '--sleep-interval', metavar='SECONDS',
+        '--sleep-interval', '--min-sleep-interval', metavar='SECONDS',
         dest='sleep_interval', type=float,
-        help='Number of seconds to sleep before each download.')
+        help='Minimum number of seconds to sleep before each download. Sleep will be for a random interval if '
+             '--max-sleep-interval is also passed.'
+    )
+    workarounds.add_option(
+        '--max-sleep-interval', metavar='SECONDS',
+        dest='max_sleep_interval', type=float,
+        help='Max number of seconds to sleep before each download. Sleep will be for a random interval if passed'
+             ' along with --min-sleep-interval or --sleep-interval, otherwise ignored.'
+    )
 
     verbosity = optparse.OptionGroup(parser, 'Verbosity / Simulation Options')
     verbosity.add_option(