The following issues were found

youtube_dl/extractor/extractors.py
2011 issues
Attempted relative import beyond top-level package
Error

Line: 4 Column: 1

              # flake8: noqa
from __future__ import unicode_literals

from .abc import (
    ABCIE,
    ABCIViewIE,
)
from .abcnews import (
    AbcNewsIE,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 8 Column: 1

                  ABCIE,
    ABCIViewIE,
)
from .abcnews import (
    AbcNewsIE,
    AbcNewsVideoIE,
)
from .abcotvs import (
    ABCOTVSIE,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 12 Column: 1

                  AbcNewsIE,
    AbcNewsVideoIE,
)
from .abcotvs import (
    ABCOTVSIE,
    ABCOTVSClipsIE,
)
from .academicearth import AcademicEarthCourseIE
from .acast import (

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 16 Column: 1

                  ABCOTVSIE,
    ABCOTVSClipsIE,
)
from .academicearth import AcademicEarthCourseIE
from .acast import (
    ACastIE,
    ACastChannelIE,
)
from .adn import ADNIE

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 17 Column: 1

                  ABCOTVSClipsIE,
)
from .academicearth import AcademicEarthCourseIE
from .acast import (
    ACastIE,
    ACastChannelIE,
)
from .adn import ADNIE
from .adobeconnect import AdobeConnectIE

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 21 Column: 1

                  ACastIE,
    ACastChannelIE,
)
from .adn import ADNIE
from .adobeconnect import AdobeConnectIE
from .adobetv import (
    AdobeTVEmbedIE,
    AdobeTVIE,
    AdobeTVShowIE,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 22 Column: 1

                  ACastChannelIE,
)
from .adn import ADNIE
from .adobeconnect import AdobeConnectIE
from .adobetv import (
    AdobeTVEmbedIE,
    AdobeTVIE,
    AdobeTVShowIE,
    AdobeTVChannelIE,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 23 Column: 1

              )
from .adn import ADNIE
from .adobeconnect import AdobeConnectIE
from .adobetv import (
    AdobeTVEmbedIE,
    AdobeTVIE,
    AdobeTVShowIE,
    AdobeTVChannelIE,
    AdobeTVVideoIE,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 30 Column: 1

                  AdobeTVChannelIE,
    AdobeTVVideoIE,
)
from .adultswim import AdultSwimIE
from .aenetworks import (
    AENetworksIE,
    AENetworksCollectionIE,
    AENetworksShowIE,
    HistoryTopicIE,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 31 Column: 1

                  AdobeTVVideoIE,
)
from .adultswim import AdultSwimIE
from .aenetworks import (
    AENetworksIE,
    AENetworksCollectionIE,
    AENetworksShowIE,
    HistoryTopicIE,
    HistoryPlayerIE,

            

Reported by Pylint.

youtube_dl/utils.py
550 issues
ssl.wrap_socket call with insecure SSL/TLS protocol version identified, security issue.
Security criptography

Line: 2531
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b502_ssl_with_bad_version.html

                              if is_https:
                    self.sock = ssl.wrap_socket(
                        sock, self.key_file, self.cert_file,
                        ssl_version=ssl.PROTOCOL_TLSv1)
                else:
                    self.sock = sock
            hc.connect = functools.partial(_hc_connect, hc)

    return hc

            

Reported by Bandit.

Attempted relative import beyond top-level package
Error

Line: 39 Column: 1

              import xml.etree.ElementTree
import zlib

from .compat import (
    compat_HTMLParseError,
    compat_HTMLParser,
    compat_HTTPError,
    compat_basestring,
    compat_chr,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 70 Column: 1

                  compat_xpath,
)

from .socks import (
    ProxyType,
    sockssocket,
)



            

Reported by Pylint.

Unable to import 'msvcrt'
Error

Line: 2052 Column: 17

                  try:
        if filename == '-':
            if sys.platform == 'win32':
                import msvcrt
                msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
            return (sys.stdout.buffer if hasattr(sys.stdout, 'buffer') else sys.stdout, filename)
        stream = open(encodeFilename(filename), open_mode)
        return (stream, filename)
    except (IOError, OSError) as err:

            

Reported by Pylint.

Module 'os' has no 'O_BINARY' member
Error

Line: 2053 Column: 53

                      if filename == '-':
            if sys.platform == 'win32':
                import msvcrt
                msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
            return (sys.stdout.buffer if hasattr(sys.stdout, 'buffer') else sys.stdout, filename)
        stream = open(encodeFilename(filename), open_mode)
        return (stream, filename)
    except (IOError, OSError) as err:
        if err.errno in (errno.EACCES,):

            

Reported by Pylint.

Module 'ntpath' has no 'splitunc' member
Error

Line: 2127 Column: 27

                      return s
    drive_or_unc, _ = os.path.splitdrive(s)
    if sys.version_info < (2, 7) and not drive_or_unc:
        drive_or_unc, _ = os.path.splitunc(s)
    norm_path = os.path.normpath(remove_start(s, drive_or_unc)).split(os.path.sep)
    if drive_or_unc:
        norm_path.pop(0)
    sanitized_path = [
        path_part if path_part in ['.', '..'] else re.sub(r'(?:[/<>:"\|\\?\*]|[\s.]$)', '#', path_part)

            

Reported by Pylint.

Module 'posixpath' has no 'splitunc' member
Error

Line: 2127 Column: 27

                      return s
    drive_or_unc, _ = os.path.splitdrive(s)
    if sys.version_info < (2, 7) and not drive_or_unc:
        drive_or_unc, _ = os.path.splitunc(s)
    norm_path = os.path.normpath(remove_start(s, drive_or_unc)).split(os.path.sep)
    if drive_or_unc:
        norm_path.pop(0)
    sanitized_path = [
        path_part if path_part in ['.', '..'] else re.sub(r'(?:[/<>:"\|\\?\*]|[\s.]$)', '#', path_part)

            

Reported by Pylint.

Module 'sys' has no 'getwindowsversion' member
Error

Line: 2216 Column: 36

              

def get_subprocess_encoding():
    if sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5:
        # For subprocess calls, encode with locale encoding
        # Refer to http://stackoverflow.com/a/9951851/35070
        encoding = preferredencoding()
    else:
        encoding = sys.getfilesystemencoding()

            

Reported by Pylint.

Module 'sys' has no 'getwindowsversion' member
Error

Line: 2241 Column: 59

                  # Pass '' directly to use Unicode APIs on Windows 2000 and up
    # (Detecting Windows NT 4 is tricky because 'major >= 4' would
    # match Windows 9x series as well. Besides, NT 4 is obsolete.)
    if not for_subprocess and sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5:
        return s

    # Jython assumes filenames are Unicode strings though reported as Python 2.x compatible
    if sys.platform.startswith('java'):
        return s

            

Reported by Pylint.

Unable to import 'msvcrt'
Error

Line: 3253 Column: 5

              # Cross-platform file locking
if sys.platform == 'win32':
    import ctypes.wintypes
    import msvcrt

    class OVERLAPPED(ctypes.Structure):
        _fields_ = [
            ('Internal', ctypes.wintypes.LPVOID),
            ('InternalHigh', ctypes.wintypes.LPVOID),

            

Reported by Pylint.

youtube_dl/extractor/generic.py
353 issues
Attempted relative import beyond top-level package
Error

Line: 9 Column: 1

              import re
import sys

from .common import InfoExtractor
from .youtube import YoutubeIE
from ..compat import (
    compat_etree_fromstring,
    compat_str,
    compat_urllib_parse_unquote,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 10 Column: 1

              import sys

from .common import InfoExtractor
from .youtube import YoutubeIE
from ..compat import (
    compat_etree_fromstring,
    compat_str,
    compat_urllib_parse_unquote,
    compat_urlparse,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 11 Column: 1

              
from .common import InfoExtractor
from .youtube import YoutubeIE
from ..compat import (
    compat_etree_fromstring,
    compat_str,
    compat_urllib_parse_unquote,
    compat_urlparse,
    compat_xml_parse_error,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 18 Column: 1

                  compat_urlparse,
    compat_xml_parse_error,
)
from ..utils import (
    determine_ext,
    ExtractorError,
    float_or_none,
    HEADRequest,
    int_or_none,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 42 Column: 1

                  xpath_text,
    xpath_with_ns,
)
from .commonprotocols import RtmpIE
from .brightcove import (
    BrightcoveLegacyIE,
    BrightcoveNewIE,
)
from .nexx import (

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 43 Column: 1

                  xpath_with_ns,
)
from .commonprotocols import RtmpIE
from .brightcove import (
    BrightcoveLegacyIE,
    BrightcoveNewIE,
)
from .nexx import (
    NexxIE,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 47 Column: 1

                  BrightcoveLegacyIE,
    BrightcoveNewIE,
)
from .nexx import (
    NexxIE,
    NexxEmbedIE,
)
from .nbc import NBCSportsVPlayerIE
from .ooyala import OoyalaIE

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 51 Column: 1

                  NexxIE,
    NexxEmbedIE,
)
from .nbc import NBCSportsVPlayerIE
from .ooyala import OoyalaIE
from .rutv import RUTVIE
from .tvc import TVCIE
from .sportbox import SportBoxIE
from .myvi import MyviIE

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 52 Column: 1

                  NexxEmbedIE,
)
from .nbc import NBCSportsVPlayerIE
from .ooyala import OoyalaIE
from .rutv import RUTVIE
from .tvc import TVCIE
from .sportbox import SportBoxIE
from .myvi import MyviIE
from .condenast import CondeNastIE

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 53 Column: 1

              )
from .nbc import NBCSportsVPlayerIE
from .ooyala import OoyalaIE
from .rutv import RUTVIE
from .tvc import TVCIE
from .sportbox import SportBoxIE
from .myvi import MyviIE
from .condenast import CondeNastIE
from .udn import UDNEmbedIE

            

Reported by Pylint.

youtube_dl/extractor/common.py
337 issues
Attempted relative import beyond top-level package
Error

Line: 18 Column: 1

              import time
import math

from ..compat import (
    compat_cookiejar_Cookie,
    compat_cookies_SimpleCookie,
    compat_etree_Element,
    compat_etree_fromstring,
    compat_getpass,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 35 Column: 1

                  compat_urlparse,
    compat_xml_parse_error,
)
from ..downloader.f4m import (
    get_base_url,
    remove_encrypted_media,
)
from ..utils import (
    NO_DEFAULT,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 39 Column: 1

                  get_base_url,
    remove_encrypted_media,
)
from ..utils import (
    NO_DEFAULT,
    age_restricted,
    base_url,
    bug_reports_message,
    clean_html,

            

Reported by Pylint.

Class 'InfoExtractor' has no '_VALID_URL' member
Error

Line: 414 Column: 44

                      # we have cached the regexp for *this* class, whereas getattr would also
        # match the superclass
        if '_VALID_URL_RE' not in cls.__dict__:
            cls._VALID_URL_RE = re.compile(cls._VALID_URL)
        return cls._VALID_URL_RE.match(url) is not None

    @classmethod
    def _match_id(cls, url):
        if '_VALID_URL_RE' not in cls.__dict__:

            

Reported by Pylint.

Class 'InfoExtractor' has no '_VALID_URL' member
Error

Line: 420 Column: 44

                  @classmethod
    def _match_id(cls, url):
        if '_VALID_URL_RE' not in cls.__dict__:
            cls._VALID_URL_RE = re.compile(cls._VALID_URL)
        m = cls._VALID_URL_RE.match(url)
        assert m
        return compat_str(m.group('id'))

    @classmethod

            

Reported by Pylint.

Assigning result of a function call, where the function has no return
Error

Line: 534 Column: 21

                          for _ in range(2):
                try:
                    self.initialize()
                    ie_result = self._real_extract(url)
                    if self._x_forwarded_for_ip:
                        ie_result['__x_forwarded_for_ip'] = self._x_forwarded_for_ip
                    return ie_result
                except GeoRestrictedError as e:
                    if self.__maybe_fake_ip_and_retry(e.countries):

            

Reported by Pylint.

Instance of 'OSError' has no 'fp' member
Error

Line: 642 Column: 21

                                  # being closed before it can be read. Works around the
                    # effects of <https://bugs.python.org/issue15002>
                    # introduced in Python 3.4.1.
                    err.fp._error = err
                    return err.fp

            if errnote is False:
                return False
            if errnote is None:

            

Reported by Pylint.

Instance of 'OSError' has no 'fp' member
Error

Line: 643 Column: 28

                                  # effects of <https://bugs.python.org/issue15002>
                    # introduced in Python 3.4.1.
                    err.fp._error = err
                    return err.fp

            if errnote is False:
                return False
            if errnote is None:
                errnote = 'Unable to download webpage'

            

Reported by Pylint.

Instance of 'InfoExtractor' has no '_NETRC_MACHINE' member
Error

Line: 1030 Column: 42

                  def _get_netrc_login_info(self, netrc_machine=None):
        username = None
        password = None
        netrc_machine = netrc_machine or self._NETRC_MACHINE

        if self._downloader.params.get('usenetrc', False):
            try:
                info = netrc.netrc().authenticators(netrc_machine)
                if info is not None:

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 1384 Column: 13

              
        def _formats_key(f):
            # TODO remove the following workaround
            from ..utils import determine_ext
            if not f.get('ext') and 'url' in f:
                f['ext'] = determine_ext(f['url'])

            if isinstance(field_preference, (list, tuple)):
                return tuple(

            

Reported by Pylint.

youtube_dl/YoutubeDL.py
246 issues
Attempted relative import beyond top-level package
Error

Line: 31 Column: 1

              
from string import ascii_letters

from .compat import (
    compat_basestring,
    compat_cookiejar,
    compat_get_terminal_size,
    compat_http_client,
    compat_kwargs,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 45 Column: 1

                  compat_urllib_request,
    compat_urllib_request_DataHandler,
)
from .utils import (
    age_restricted,
    args_to_str,
    ContentTooShortError,
    date_from_str,
    DateRange,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 97 Column: 1

                  YoutubeDLHandler,
    YoutubeDLRedirectHandler,
)
from .cache import Cache
from .extractor import get_info_extractor, gen_extractor_classes, _LAZY_LOADER
from .extractor.openload import PhantomJSwrapper
from .downloader import get_suitable_downloader
from .downloader.rtmp import rtmpdump_version
from .postprocessor import (

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 98 Column: 1

                  YoutubeDLRedirectHandler,
)
from .cache import Cache
from .extractor import get_info_extractor, gen_extractor_classes, _LAZY_LOADER
from .extractor.openload import PhantomJSwrapper
from .downloader import get_suitable_downloader
from .downloader.rtmp import rtmpdump_version
from .postprocessor import (
    FFmpegFixupM3u8PP,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 99 Column: 1

              )
from .cache import Cache
from .extractor import get_info_extractor, gen_extractor_classes, _LAZY_LOADER
from .extractor.openload import PhantomJSwrapper
from .downloader import get_suitable_downloader
from .downloader.rtmp import rtmpdump_version
from .postprocessor import (
    FFmpegFixupM3u8PP,
    FFmpegFixupM4aPP,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 100 Column: 1

              from .cache import Cache
from .extractor import get_info_extractor, gen_extractor_classes, _LAZY_LOADER
from .extractor.openload import PhantomJSwrapper
from .downloader import get_suitable_downloader
from .downloader.rtmp import rtmpdump_version
from .postprocessor import (
    FFmpegFixupM3u8PP,
    FFmpegFixupM4aPP,
    FFmpegFixupStretchedPP,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 101 Column: 1

              from .extractor import get_info_extractor, gen_extractor_classes, _LAZY_LOADER
from .extractor.openload import PhantomJSwrapper
from .downloader import get_suitable_downloader
from .downloader.rtmp import rtmpdump_version
from .postprocessor import (
    FFmpegFixupM3u8PP,
    FFmpegFixupM4aPP,
    FFmpegFixupStretchedPP,
    FFmpegMergerPP,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 102 Column: 1

              from .extractor.openload import PhantomJSwrapper
from .downloader import get_suitable_downloader
from .downloader.rtmp import rtmpdump_version
from .postprocessor import (
    FFmpegFixupM3u8PP,
    FFmpegFixupM4aPP,
    FFmpegFixupStretchedPP,
    FFmpegMergerPP,
    FFmpegPostProcessor,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 110 Column: 1

                  FFmpegPostProcessor,
    get_postprocessor,
)
from .version import __version__

if compat_os_name == 'nt':
    import ctypes



            

Reported by Pylint.

Method should have "self" as first argument
Error

Line: 812 Column: 5

                      else:
            self.report_error('no suitable InfoExtractor for URL %s' % url)

    def __handle_extraction_exceptions(func):
        def wrapper(self, *args, **kwargs):
            try:
                return func(self, *args, **kwargs)
            except GeoRestrictedError as e:
                msg = e.msg

            

Reported by Pylint.

youtube_dl/extractor/youtube.py
245 issues
Attempted relative import beyond top-level package
Error

Line: 12 Column: 1

              import re
import traceback

from .common import InfoExtractor, SearchInfoExtractor
from ..compat import (
    compat_chr,
    compat_HTTPError,
    compat_parse_qs,
    compat_str,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 13 Column: 1

              import traceback

from .common import InfoExtractor, SearchInfoExtractor
from ..compat import (
    compat_chr,
    compat_HTTPError,
    compat_parse_qs,
    compat_str,
    compat_urllib_parse_unquote_plus,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 23 Column: 1

                  compat_urllib_parse_urlparse,
    compat_urlparse,
)
from ..jsinterp import JSInterpreter
from ..utils import (
    ExtractorError,
    clean_html,
    dict_get,
    float_or_none,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 24 Column: 1

                  compat_urlparse,
)
from ..jsinterp import JSInterpreter
from ..utils import (
    ExtractorError,
    clean_html,
    dict_get,
    float_or_none,
    int_or_none,

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 1231 Column: 9

                  def suitable(cls, url):
        # Hack for lazy extractors until more generic solution is implemented
        # (see #28780)
        from .youtube import parse_qs
        qs = parse_qs(url)
        if qs.get('list', [None])[0]:
            return False
        return super(YoutubeIE, cls).suitable(url)


            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 2932 Column: 9

                          return False
        # Hack for lazy extractors until more generic solution is implemented
        # (see #28780)
        from .youtube import parse_qs
        qs = parse_qs(url)
        if qs.get('v', [None])[0]:
            return False
        return super(YoutubePlaylistIE, cls).suitable(url)


            

Reported by Pylint.

TODO: reverse actual botguard identifier generation algo
Error

Line: 103 Column: 3

                              'f.req': json.dumps(f_req),
                'flowName': 'GlifWebSignIn',
                'flowEntry': 'ServiceLogin',
                # TODO: reverse actual botguard identifier generation algo
                'bgRequest': '["identifier",""]',
            })
            return self._download_json(
                url, None, note=note, errnote=errnote,
                transform_source=lambda s: re.sub(r'^[^[]*', '', s),

            

Reported by Pylint.

Redefining name 'parse_qs' from outer scope (line 49)
Error

Line: 1231 Column: 9

                  def suitable(cls, url):
        # Hack for lazy extractors until more generic solution is implemented
        # (see #28780)
        from .youtube import parse_qs
        qs = parse_qs(url)
        if qs.get('list', [None])[0]:
            return False
        return super(YoutubeIE, cls).suitable(url)


            

Reported by Pylint.

Using possibly undefined loop variable 'i'
Error

Line: 1308 Column: 33

                              else:
                    yield 's[%d]' % prev
            if step is None:
                yield 's[%d]' % i
            else:
                yield _genslice(start, i, step)

        test_string = ''.join(map(compat_chr, range(len(example_sig))))
        cache_res = func(test_string)

            

Reported by Pylint.

Using possibly undefined loop variable 'i'
Error

Line: 1310 Column: 40

                          if step is None:
                yield 's[%d]' % i
            else:
                yield _genslice(start, i, step)

        test_string = ''.join(map(compat_chr, range(len(example_sig))))
        cache_res = func(test_string)
        cache_spec = [ord(c) for c in cache_res]
        expr_code = ' + '.join(gen_sig_code(cache_spec))

            

Reported by Pylint.

test/test_InfoExtractor.py
204 issues
Redefining built-in 'format'
Error

Line: 25 Column: 27

              

class InfoExtractorTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
    def log_message(self, format, *args):
        pass

    def do_GET(self):
        if self.path == '/teapot':
            self.send_response(TEAPOT_RESPONSE_STATUS)

            

Reported by Pylint.

Method '_get_automatic_captions' is abstract in class 'InfoExtractor' but is not overridden
Error

Line: 38 Column: 1

                          assert False


class TestIE(InfoExtractor):
    pass


class TestInfoExtractor(unittest.TestCase):
    def setUp(self):

            

Reported by Pylint.

Method '_get_subtitles' is abstract in class 'InfoExtractor' but is not overridden
Error

Line: 38 Column: 1

                          assert False


class TestIE(InfoExtractor):
    pass


class TestInfoExtractor(unittest.TestCase):
    def setUp(self):

            

Reported by Pylint.

Method '_mark_watched' is abstract in class 'InfoExtractor' but is not overridden
Error

Line: 38 Column: 1

                          assert False


class TestIE(InfoExtractor):
    pass


class TestInfoExtractor(unittest.TestCase):
    def setUp(self):

            

Reported by Pylint.

Access to a protected member _html_search_regex of a client class
Error

Line: 51 Column: 36

              
    def test_html_search_regex(self):
        html = '<p id="foo">Watch this <a href="http://www.youtube.com/watch?v=BaW_jenozKc">video</a></p>'
        search = lambda re, *args: self.ie._html_search_regex(re, html, *args)
        self.assertEqual(search(r'<p id="foo">(.+?)</p>', 'foo'), 'Watch this video')

    def test_opengraph(self):
        ie = self.ie
        html = '''

            

Reported by Pylint.

Access to a protected member _og_search_title of a client class
Error

Line: 66 Column: 26

                          <meta name="og:test2" content="foo >//< bar"/>
            <meta property=og-test3 content='Ill-formatted opengraph'/>
            '''
        self.assertEqual(ie._og_search_title(html), 'Foo')
        self.assertEqual(ie._og_search_description(html), 'Some video\'s description ')
        self.assertEqual(ie._og_search_thumbnail(html), 'http://domain.com/pic.jpg?key1=val1&key2=val2')
        self.assertEqual(ie._og_search_video_url(html, default=None), None)
        self.assertEqual(ie._og_search_property('foobar', html), 'Foo')
        self.assertEqual(ie._og_search_property('test1', html), 'foo > < bar')

            

Reported by Pylint.

Access to a protected member _og_search_description of a client class
Error

Line: 67 Column: 26

                          <meta property=og-test3 content='Ill-formatted opengraph'/>
            '''
        self.assertEqual(ie._og_search_title(html), 'Foo')
        self.assertEqual(ie._og_search_description(html), 'Some video\'s description ')
        self.assertEqual(ie._og_search_thumbnail(html), 'http://domain.com/pic.jpg?key1=val1&key2=val2')
        self.assertEqual(ie._og_search_video_url(html, default=None), None)
        self.assertEqual(ie._og_search_property('foobar', html), 'Foo')
        self.assertEqual(ie._og_search_property('test1', html), 'foo > < bar')
        self.assertEqual(ie._og_search_property('test2', html), 'foo >//< bar')

            

Reported by Pylint.

Access to a protected member _og_search_thumbnail of a client class
Error

Line: 68 Column: 26

                          '''
        self.assertEqual(ie._og_search_title(html), 'Foo')
        self.assertEqual(ie._og_search_description(html), 'Some video\'s description ')
        self.assertEqual(ie._og_search_thumbnail(html), 'http://domain.com/pic.jpg?key1=val1&key2=val2')
        self.assertEqual(ie._og_search_video_url(html, default=None), None)
        self.assertEqual(ie._og_search_property('foobar', html), 'Foo')
        self.assertEqual(ie._og_search_property('test1', html), 'foo > < bar')
        self.assertEqual(ie._og_search_property('test2', html), 'foo >//< bar')
        self.assertEqual(ie._og_search_property('test3', html), 'Ill-formatted opengraph')

            

Reported by Pylint.

Access to a protected member _og_search_video_url of a client class
Error

Line: 69 Column: 26

                      self.assertEqual(ie._og_search_title(html), 'Foo')
        self.assertEqual(ie._og_search_description(html), 'Some video\'s description ')
        self.assertEqual(ie._og_search_thumbnail(html), 'http://domain.com/pic.jpg?key1=val1&key2=val2')
        self.assertEqual(ie._og_search_video_url(html, default=None), None)
        self.assertEqual(ie._og_search_property('foobar', html), 'Foo')
        self.assertEqual(ie._og_search_property('test1', html), 'foo > < bar')
        self.assertEqual(ie._og_search_property('test2', html), 'foo >//< bar')
        self.assertEqual(ie._og_search_property('test3', html), 'Ill-formatted opengraph')
        self.assertEqual(ie._og_search_property(('test0', 'test1'), html), 'foo > < bar')

            

Reported by Pylint.

Access to a protected member _og_search_property of a client class
Error

Line: 70 Column: 26

                      self.assertEqual(ie._og_search_description(html), 'Some video\'s description ')
        self.assertEqual(ie._og_search_thumbnail(html), 'http://domain.com/pic.jpg?key1=val1&key2=val2')
        self.assertEqual(ie._og_search_video_url(html, default=None), None)
        self.assertEqual(ie._og_search_property('foobar', html), 'Foo')
        self.assertEqual(ie._og_search_property('test1', html), 'foo > < bar')
        self.assertEqual(ie._og_search_property('test2', html), 'foo >//< bar')
        self.assertEqual(ie._og_search_property('test3', html), 'Ill-formatted opengraph')
        self.assertEqual(ie._og_search_property(('test0', 'test1'), html), 'foo > < bar')
        self.assertRaises(RegexNotFoundError, ie._og_search_property, 'test0', html, None, fatal=True)

            

Reported by Pylint.

test/test_utils.py
183 issues
Use of eval
Error

Line: 506 Column: 13

                      self.assertEqual(str_to_int(523), 523)
        # Python 3 has no long
        if sys.version_info < (3, 0):
            eval('self.assertEqual(str_to_int(123456L), 123456)')
        self.assertEqual(str_to_int('noninteger'), None)
        self.assertEqual(str_to_int([]), None)

    def test_url_basename(self):
        self.assertEqual(url_basename('http://foo.de/'), '')

            

Reported by Pylint.

Use of possibly insecure function - consider using safer ast.literal_eval.
Security blacklist

Line: 506
Suggestion: https://bandit.readthedocs.io/en/latest/blacklists/blacklist_calls.html#b307-eval

                      self.assertEqual(str_to_int(523), 523)
        # Python 3 has no long
        if sys.version_info < (3, 0):
            eval('self.assertEqual(str_to_int(123456L), 123456)')
        self.assertEqual(str_to_int('noninteger'), None)
        self.assertEqual(str_to_int([]), None)

    def test_url_basename(self):
        self.assertEqual(url_basename('http://foo.de/'), '')

            

Reported by Bandit.

Too many lines in module (1480/1000)
Error

Line: 1 Column: 1

              #!/usr/bin/env python
# coding: utf-8

from __future__ import unicode_literals

# Allow direct execution
import os
import sys
import unittest

            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              #!/usr/bin/env python
# coding: utf-8

from __future__ import unicode_literals

# Allow direct execution
import os
import sys
import unittest

            

Reported by Pylint.

Import "import io" should be placed at the top of the module
Error

Line: 14 Column: 1

              

# Various small unit tests
import io
import json
import xml.etree.ElementTree

from youtube_dl.utils import (
    age_restricted,

            

Reported by Pylint.

Import "import json" should be placed at the top of the module
Error

Line: 15 Column: 1

              
# Various small unit tests
import io
import json
import xml.etree.ElementTree

from youtube_dl.utils import (
    age_restricted,
    args_to_str,

            

Reported by Pylint.

Using xml.etree.ElementTree to parse untrusted XML data is known to be vulnerable to XML attacks. Replace xml.etree.ElementTree with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.
Security blacklist

Line: 16
Suggestion: https://bandit.readthedocs.io/en/latest/blacklists/blacklist_imports.html#b405-import-xml-etree

              # Various small unit tests
import io
import json
import xml.etree.ElementTree

from youtube_dl.utils import (
    age_restricted,
    args_to_str,
    encode_base_n,

            

Reported by Bandit.

Import "import xml.etree.ElementTree" should be placed at the top of the module
Error

Line: 16 Column: 1

              # Various small unit tests
import io
import json
import xml.etree.ElementTree

from youtube_dl.utils import (
    age_restricted,
    args_to_str,
    encode_base_n,

            

Reported by Pylint.

Import "from youtube_dl.utils import age_restricted, args_to_str, encode_base_n, caesar, clean_html, clean_podcast_url, date_from_str, DateRange, detect_exe_version, determine_ext, dict_get, encode_compat_str, encodeFilename, escape_rfc3986, escape_url, extract_attributes, ExtractorError, find_xpath_attr, fix_xml_ampersands, float_or_none, get_element_by_class, get_element_by_attribute, get_elements_by_class, get_elements_by_attribute, InAdvancePagedList, int_or_none, intlist_to_bytes, is_html, js_to_json, limit_length, merge_dicts, mimetype2ext, month_by_name, multipart_encode, ohdave_rsa_encrypt, OnDemandPagedList, orderedSet, parse_age_limit, parse_duration, parse_filesize, parse_count, parse_iso8601, parse_resolution, parse_bitrate, pkcs1pad, read_batch_urls, sanitize_filename, sanitize_path, sanitize_url, expand_path, prepend_extension, replace_extension, remove_start, remove_end, remove_quotes, rot47, shell_quote, smuggle_url, str_to_int, strip_jsonp, strip_or_none, subtitles_filename, timeconvert, unescapeHTML, unified_strdate, unified_timestamp, unsmuggle_url, uppercase_escape, lowercase_escape, url_basename, url_or_none, base_url, urljoin, urlencode_postdata, urshift, update_url_query, version_tuple, xpath_with_ns, xpath_element, xpath_text, xpath_attr, render_table, match_str, parse_dfxp_time_expr, dfxp2srt, cli_option, cli_valueless_option, cli_bool_option, parse_codecs" should be placed at the top of the module
Error

Line: 18 Column: 1

              import json
import xml.etree.ElementTree

from youtube_dl.utils import (
    age_restricted,
    args_to_str,
    encode_base_n,
    caesar,
    clean_html,

            

Reported by Pylint.

Import "from youtube_dl.compat import compat_chr, compat_etree_fromstring, compat_getenv, compat_os_name, compat_setenv, compat_urlparse, compat_parse_qs" should be placed at the top of the module
Error

Line: 109 Column: 1

                  cli_bool_option,
    parse_codecs,
)
from youtube_dl.compat import (
    compat_chr,
    compat_etree_fromstring,
    compat_getenv,
    compat_os_name,
    compat_setenv,

            

Reported by Pylint.

youtube_dl/compat.py
149 issues
Module 'urllib.parse' has no '_hextochr' member
Error

Line: 2406 Column: 24

                      append = res.append
        for item in bits[1:]:
            try:
                append(compat_urllib_parse._hextochr[item[:2]])
                append(item[2:])
            except KeyError:
                append(b'%')
                append(item)
        return b''.join(res)

            

Reported by Pylint.

Module 'urllib' has no '_hextochr' member
Error

Line: 2406 Column: 24

                      append = res.append
        for item in bits[1:]:
            try:
                append(compat_urllib_parse._hextochr[item[:2]])
                append(item[2:])
            except KeyError:
                append(b'%')
                append(item)
        return b''.join(res)

            

Reported by Pylint.

Module 'os' has no '_name' member; maybe '_names'?
Error

Line: 2653 Column: 18

                      return parsed_result


compat_os_name = os._name if os.name == 'java' else os.name


if compat_os_name == 'nt':
    def compat_shlex_quote(s):
        return s if re.match(r'^[-_\w./]+$', s) else '"%s"' % s.replace('"', '\\"')

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 2703 Column: 9

                  # Otherwise it will fail if any non-ASCII characters present (see #3854 #3217 #2918)

    def compat_getenv(key, default=None):
        from .utils import get_filesystem_encoding
        env = os.getenv(key, default)
        if env:
            env = env.decode(get_filesystem_encoding())
        return env


            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 2711 Column: 13

              
    def compat_setenv(key, value, env=os.environ):
        def encode(v):
            from .utils import get_filesystem_encoding
            return v.encode(get_filesystem_encoding()) if isinstance(v, compat_str) else v
        env[encode(key)] = encode(value)

    # HACK: The default implementations of os.path.expanduser from cpython do not decode
    # environment variables with filesystem encoding. We will work around this by

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 2790 Column: 9

              
if sys.version_info < (3, 0):
    def compat_print(s):
        from .utils import preferredencoding
        print(s.encode(preferredencoding(), 'xmlcharrefreplace'))
else:
    def compat_print(s):
        assert isinstance(s, compat_str)
        print(s)

            

Reported by Pylint.

Attempted relative import beyond top-level package
Error

Line: 2801 Column: 13

              if sys.version_info < (3, 0) and sys.platform == 'win32':
    def compat_getpass(prompt, *args, **kwargs):
        if isinstance(prompt, compat_str):
            from .utils import preferredencoding
            prompt = prompt.encode(preferredencoding())
        return getpass.getpass(prompt, *args, **kwargs)
else:
    compat_getpass = getpass.getpass


            

Reported by Pylint.

Undefined variable 'buffer'
Error

Line: 2958 Column: 43

                  if platform.python_implementation() == 'IronPython' and sys.version_info < (2, 7, 8):
        class compat_Struct(struct.Struct):
            def unpack(self, string):
                if not isinstance(string, buffer):  # noqa: F821
                    string = buffer(string)  # noqa: F821
                return super(compat_Struct, self).unpack(string)
    else:
        compat_Struct = struct.Struct


            

Reported by Pylint.

Undefined variable 'buffer'
Error

Line: 2959 Column: 30

                      class compat_Struct(struct.Struct):
            def unpack(self, string):
                if not isinstance(string, buffer):  # noqa: F821
                    string = buffer(string)  # noqa: F821
                return super(compat_Struct, self).unpack(string)
    else:
        compat_Struct = struct.Struct



            

Reported by Pylint.

Module 'sys' has no 'pypy_version_info' member
Error

Line: 2983 Column: 51

                  compat_b64decode = base64.b64decode


if platform.python_implementation() == 'PyPy' and sys.pypy_version_info < (5, 4, 0):
    # PyPy2 prior to version 5.4.0 expects byte strings as Windows function
    # names, see the original PyPy issue [1] and the youtube-dl one [2].
    # 1. https://bitbucket.org/pypy/pypy/issues/2360/windows-ctypescdll-typeerror-function-name
    # 2. https://github.com/ytdl-org/youtube-dl/pull/4392
    def compat_ctypes_WINFUNCTYPE(*args, **kwargs):

            

Reported by Pylint.

test/test_YoutubeDL.py
133 issues
Bad first argument 'YDL' given to super()
Error

Line: 723 Column: 17

                              self.params['simulate'] = True

            def process_info(self, info_dict):
                super(YDL, self).process_info(info_dict)

            def _match_entry(self, info_dict, incomplete):
                res = super(FilterYDL, self)._match_entry(info_dict, incomplete)
                if res is None:
                    self.downloaded_info_dicts.append(info_dict)

            

Reported by Pylint.

Parameters differ from overridden 'to_screen' method
Error

Line: 34 Column: 5

                  def process_info(self, info_dict):
        self.downloaded_info_dicts.append(info_dict)

    def to_screen(self, msg):
        self.msgs.append(msg)


def _make_result(formats, **kwargs):
    res = {

            

Reported by Pylint.

Access to a protected member _sort_formats of a client class
Error

Line: 61 Column: 9

                      ]
        info_dict = _make_result(formats)
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'webm')

        # Different resolution => download best quality (mp4)

            

Reported by Pylint.

Access to a protected member _sort_formats of a client class
Error

Line: 75 Column: 9

                      ]
        info_dict['formats'] = formats
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'mp4')

        # No prefer_free_formats => prefer mp4 and flv for greater compatibility

            

Reported by Pylint.

Access to a protected member _sort_formats of a client class
Error

Line: 90 Column: 9

                      ]
        info_dict['formats'] = formats
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'mp4')

        ydl = YDL()

            

Reported by Pylint.

Access to a protected member _sort_formats of a client class
Error

Line: 103 Column: 9

                      ]
        info_dict['formats'] = formats
        yie = YoutubeIE(ydl)
        yie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(info_dict)
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['ext'], 'flv')

    def test_format_selection(self):

            

Reported by Pylint.

Access to a protected member _sort_formats of a client class
Error

Line: 190 Column: 9

                      info_dict = _make_result(formats)
        ydl = YDL({'format': 'best'})
        ie = YoutubeIE(ydl)
        ie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(copy.deepcopy(info_dict))
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], 'aac-64')

        ydl = YDL({'format': 'mp3'})

            

Reported by Pylint.

Access to a protected member _sort_formats of a client class
Error

Line: 197 Column: 9

              
        ydl = YDL({'format': 'mp3'})
        ie = YoutubeIE(ydl)
        ie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(copy.deepcopy(info_dict))
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], 'mp3-64')

        ydl = YDL({'prefer_free_formats': True})

            

Reported by Pylint.

Access to a protected member _sort_formats of a client class
Error

Line: 204 Column: 9

              
        ydl = YDL({'prefer_free_formats': True})
        ie = YoutubeIE(ydl)
        ie._sort_formats(info_dict['formats'])
        ydl.process_ie_result(copy.deepcopy(info_dict))
        downloaded = ydl.downloaded_info_dicts[0]
        self.assertEqual(downloaded['format_id'], 'ogg-64')

    def test_format_selection_video(self):

            

Reported by Pylint.

Access to a protected member _formats of a client class
Error

Line: 327 Column: 20

                      ]

        def format_info(f_id):
            info = YoutubeIE._formats[f_id].copy()

            # XXX: In real cases InfoExtractor._parse_mpd_formats() fills up 'acodec'
            # and 'vcodec', while in tests such information is incomplete since
            # commit a6c2c24479e5f4827ceb06f64d855329c0a6f593
            # test_YoutubeDL.test_youtube_format_selection is broken without

            

Reported by Pylint.