diff options
Diffstat (limited to 'youtube_dl/YoutubeDL.py')
| -rwxr-xr-x | youtube_dl/YoutubeDL.py | 39 | 
1 files changed, 32 insertions, 7 deletions
| diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 4e7fd1063..1435754c2 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -582,7 +582,7 @@ class YoutubeDL(object):          if self.params.get('cookiefile') is not None:              self.cookiejar.save(ignore_discard=True, ignore_expires=True) -    def trouble(self, message=None, tb=None): +    def trouble(self, *args, **kwargs):          """Determine action to take when a download problem appears.          Depending on if the downloader has been configured to ignore @@ -591,6 +591,11 @@ class YoutubeDL(object):          tb, if given, is additional traceback information.          """ +        # message=None, tb=None, is_error=True +        message = args[0] if len(args) > 0 else kwargs.get('message', None) +        tb = args[1] if len(args) > 1 else kwargs.get('tb', None) +        is_error = args[2] if len(args) > 2 else kwargs.get('is_error', True) +          if message is not None:              self.to_stderr(message)          if self.params.get('verbose'): @@ -603,7 +608,10 @@ class YoutubeDL(object):                  else:                      tb_data = traceback.format_list(traceback.extract_stack())                      tb = ''.join(tb_data) -            self.to_stderr(tb) +            if tb: +                self.to_stderr(tb) +        if not is_error: +            return          if not self.params.get('ignoreerrors', False):              if sys.exc_info()[0] and hasattr(sys.exc_info()[1], 'exc_info') and sys.exc_info()[1].exc_info[0]:                  exc_info = sys.exc_info()[1].exc_info @@ -612,11 +620,18 @@ class YoutubeDL(object):              raise DownloadError(message, exc_info)          self._download_retcode = 1 -    def report_warning(self, message): +    def report_warning(self, message, only_once=False, _cache={}):          '''          Print the message to stderr, it will be prefixed with 'WARNING:'          If stderr is a tty file the 'WARNING:' will be colored          ''' +        if only_once: +            m_hash = hash((self, message)) +            m_cnt = _cache.setdefault(m_hash, 0) +            _cache[m_hash] = m_cnt + 1 +            if m_cnt > 0: +                return +          if self.params.get('logger') is not None:              self.params['logger'].warning(message)          else: @@ -629,7 +644,7 @@ class YoutubeDL(object):              warning_message = '%s %s' % (_msg_header, message)              self.to_stderr(warning_message) -    def report_error(self, message, tb=None): +    def report_error(self, message, *args, **kwargs):          '''          Do the same as trouble, but prefixes the message with 'ERROR:', colored          in red if stderr is a tty file. @@ -638,8 +653,18 @@ class YoutubeDL(object):              _msg_header = '\033[0;31mERROR:\033[0m'          else:              _msg_header = 'ERROR:' -        error_message = '%s %s' % (_msg_header, message) -        self.trouble(error_message, tb) +        kwargs['message'] = '%s %s' % (_msg_header, message) +        self.trouble(*args, **kwargs) + +    def report_unscoped_cookies(self, *args, **kwargs): +        # message=None, tb=False, is_error=False +        if len(args) <= 2: +            kwargs.setdefault('is_error', False) +            if len(args) <= 0: +                kwargs.setdefault( +                    'message', +                    'Unscoped cookies are not allowed: please specify some sort of scoping') +        self.report_error(*args, **kwargs)      def report_file_already_downloaded(self, file_name):          """Report file has already been fully downloaded.""" @@ -835,7 +860,7 @@ class YoutubeDL(object):                  msg += '\nYou might want to use a VPN or a proxy server (with --proxy) to workaround.'                  self.report_error(msg)              except ExtractorError as e:  # An error we somewhat expected -                self.report_error(compat_str(e), e.format_traceback()) +                self.report_error(compat_str(e), tb=e.format_traceback())              except MaxDownloadsReached:                  raise              except Exception as e: | 
