Skip to content

Commit

Permalink
Delay initialization of InfoExtractors until they are needed
Browse files Browse the repository at this point in the history
  • Loading branch information
jaimeMF committed Apr 8, 2016
1 parent 568d2f7 commit e52d7f8
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
10 changes: 6 additions & 4 deletions youtube_dl/YoutubeDL.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
YoutubeDLHandler,
)
from .cache import Cache
from .extractor import get_info_extractor, gen_extractors
from .extractor import get_info_extractor, gen_extractor_classes
from .downloader import get_suitable_downloader
from .downloader.rtmp import rtmpdump_version
from .postprocessor import (
Expand Down Expand Up @@ -378,8 +378,9 @@ def warn_if_short_id(self, argv):
def add_info_extractor(self, ie):
"""Add an InfoExtractor object to the end of the list."""
self._ies.append(ie)
self._ies_instances[ie.ie_key()] = ie
ie.set_downloader(self)
if not isinstance(ie, type):
self._ies_instances[ie.ie_key()] = ie
ie.set_downloader(self)

def get_info_extractor(self, ie_key):
"""
Expand All @@ -397,7 +398,7 @@ def add_default_info_extractors(self):
"""
Add the InfoExtractors returned by gen_extractors to the end of the list
"""
for ie in gen_extractors():
for ie in gen_extractor_classes():
self.add_info_extractor(ie)

def add_post_processor(self, pp):
Expand Down Expand Up @@ -661,6 +662,7 @@ def extract_info(self, url, download=True, ie_key=None, extra_info={},
if not ie.suitable(url):
continue

ie = self.get_info_extractor(ie.ie_key())
if not ie.working():
self.report_warning('The program functionality for this site has been marked as broken, '
'and will probably not work.')
Expand Down
9 changes: 8 additions & 1 deletion youtube_dl/extractor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -997,11 +997,18 @@
_ALL_CLASSES.append(GenericIE)


def gen_extractor_classes():
""" Return a list of supported extractors.
The order does matter; the first extractor matched is the one handling the URL.
"""
return _ALL_CLASSES


def gen_extractors():
""" Return a list of an instance of every supported extractor.
The order does matter; the first extractor matched is the one handling the URL.
"""
return [klass() for klass in _ALL_CLASSES]
return [klass() for klass in gen_extractor_classes()]


def list_extractors(age_limit):
Expand Down

0 comments on commit e52d7f8

Please sign in to comment.