mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:30:46 +00:00 
			
		
		
		
	[extractor] Import _ALL_CLASSES lazily
				
					
				
			This significantly speeds up `import yt_dlp` in the absence of `lazy_extractors`
This commit is contained in:
		@@ -1,32 +1,15 @@
 | 
			
		||||
import contextlib
 | 
			
		||||
import os
 | 
			
		||||
from ..compat.compat_utils import passthrough_module
 | 
			
		||||
 | 
			
		||||
from ..utils import load_plugins
 | 
			
		||||
 | 
			
		||||
_LAZY_LOADER = False
 | 
			
		||||
if not os.environ.get('YTDLP_NO_LAZY_EXTRACTORS'):
 | 
			
		||||
    with contextlib.suppress(ImportError):
 | 
			
		||||
        from .lazy_extractors import *  # noqa: F403
 | 
			
		||||
        from .lazy_extractors import _ALL_CLASSES
 | 
			
		||||
        _LAZY_LOADER = True
 | 
			
		||||
 | 
			
		||||
if not _LAZY_LOADER:
 | 
			
		||||
    from ._extractors import *  # noqa: F403
 | 
			
		||||
    _ALL_CLASSES = [  # noqa: F811
 | 
			
		||||
        klass
 | 
			
		||||
        for name, klass in globals().items()
 | 
			
		||||
        if name.endswith('IE') and name != 'GenericIE'
 | 
			
		||||
    ]
 | 
			
		||||
    _ALL_CLASSES.append(GenericIE)  # noqa: F405
 | 
			
		||||
 | 
			
		||||
_PLUGIN_CLASSES = load_plugins('extractor', 'IE', globals())
 | 
			
		||||
_ALL_CLASSES = list(_PLUGIN_CLASSES.values()) + _ALL_CLASSES
 | 
			
		||||
passthrough_module(__name__, '.extractors')
 | 
			
		||||
del passthrough_module
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def gen_extractor_classes():
 | 
			
		||||
    """ Return a list of supported extractors.
 | 
			
		||||
    The order does matter; the first extractor matched is the one handling the URL.
 | 
			
		||||
    """
 | 
			
		||||
    from .extractors import _ALL_CLASSES
 | 
			
		||||
 | 
			
		||||
    return _ALL_CLASSES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -39,10 +22,12 @@ def gen_extractors():
 | 
			
		||||
 | 
			
		||||
def list_extractor_classes(age_limit=None):
 | 
			
		||||
    """Return a list of extractors that are suitable for the given age, sorted by extractor name"""
 | 
			
		||||
    from .generic import GenericIE
 | 
			
		||||
 | 
			
		||||
    yield from sorted(filter(
 | 
			
		||||
        lambda ie: ie.is_suitable(age_limit) and ie != GenericIE,  # noqa: F405
 | 
			
		||||
        lambda ie: ie.is_suitable(age_limit) and ie != GenericIE,
 | 
			
		||||
        gen_extractor_classes()), key=lambda ie: ie.IE_NAME.lower())
 | 
			
		||||
    yield GenericIE  # noqa: F405
 | 
			
		||||
    yield GenericIE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def list_extractors(age_limit=None):
 | 
			
		||||
@@ -52,4 +37,6 @@ def list_extractors(age_limit=None):
 | 
			
		||||
 | 
			
		||||
def get_info_extractor(ie_name):
 | 
			
		||||
    """Returns the info extractor class with the given ie_name"""
 | 
			
		||||
    return globals()[ie_name + 'IE']
 | 
			
		||||
    from . import extractors
 | 
			
		||||
 | 
			
		||||
    return getattr(extractors, f'{ie_name}IE')
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								yt_dlp/extractor/extractors.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								yt_dlp/extractor/extractors.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
import contextlib
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
from ..utils import load_plugins
 | 
			
		||||
 | 
			
		||||
_LAZY_LOADER = False
 | 
			
		||||
if not os.environ.get('YTDLP_NO_LAZY_EXTRACTORS'):
 | 
			
		||||
    with contextlib.suppress(ImportError):
 | 
			
		||||
        from .lazy_extractors import *  # noqa: F403
 | 
			
		||||
        from .lazy_extractors import _ALL_CLASSES
 | 
			
		||||
        _LAZY_LOADER = True
 | 
			
		||||
 | 
			
		||||
if not _LAZY_LOADER:
 | 
			
		||||
    from ._extractors import *  # noqa: F403
 | 
			
		||||
    _ALL_CLASSES = [  # noqa: F811
 | 
			
		||||
        klass
 | 
			
		||||
        for name, klass in globals().items()
 | 
			
		||||
        if name.endswith('IE') and name != 'GenericIE'
 | 
			
		||||
    ]
 | 
			
		||||
    _ALL_CLASSES.append(GenericIE)  # noqa: F405
 | 
			
		||||
 | 
			
		||||
_PLUGIN_CLASSES = load_plugins('extractor', 'IE', globals())
 | 
			
		||||
_ALL_CLASSES = list(_PLUGIN_CLASSES.values()) + _ALL_CLASSES
 | 
			
		||||
		Reference in New Issue
	
	Block a user