aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/quick-test.yml2
-rw-r--r--devscripts/lazy_load_template.py4
-rw-r--r--devscripts/make_lazy_extractors.py3
-rw-r--r--yt_dlp/extractor/common.py4
-rw-r--r--yt_dlp/extractor/rutube.py2
-rw-r--r--yt_dlp/extractor/youtube.py2
6 files changed, 9 insertions, 8 deletions
diff --git a/.github/workflows/quick-test.yml b/.github/workflows/quick-test.yml
index 7d409dfc4..500a504a4 100644
--- a/.github/workflows/quick-test.yml
+++ b/.github/workflows/quick-test.yml
@@ -27,5 +27,7 @@ jobs:
python-version: 3.9
- name: Install flake8
run: pip install flake8
+ - name: Make lazy extractors
+ run: python devscripts/make_lazy_extractors.py yt_dlp/extractor/lazy_extractors.py
- name: Run flake8
run: flake8 .
diff --git a/devscripts/lazy_load_template.py b/devscripts/lazy_load_template.py
index d06655d10..20322e04b 100644
--- a/devscripts/lazy_load_template.py
+++ b/devscripts/lazy_load_template.py
@@ -8,10 +8,6 @@ import re
class LazyLoadExtractor(object):
_module = None
- @classmethod
- def ie_key(cls):
- return cls.__name__[:-2]
-
def __new__(cls, *args, **kwargs):
mod = __import__(cls._module, fromlist=(cls.__name__,))
real_cls = getattr(mod, cls.__name__)
diff --git a/devscripts/make_lazy_extractors.py b/devscripts/make_lazy_extractors.py
index 727d28204..8189c77dc 100644
--- a/devscripts/make_lazy_extractors.py
+++ b/devscripts/make_lazy_extractors.py
@@ -32,6 +32,7 @@ with open('devscripts/lazy_load_template.py', 'rt') as f:
module_contents = [
module_template,
+ getsource(InfoExtractor.ie_key),
getsource(InfoExtractor._match_valid_url),
getsource(InfoExtractor.suitable),
'\nclass LazyLoadSearchExtractor(LazyLoadExtractor):\n pass\n']
@@ -104,7 +105,7 @@ for ie in ordered_cls:
names.append(name)
module_contents.append(
- '_ALL_CLASSES = [{0}]'.format(', '.join(names)))
+ '\n_ALL_CLASSES = [{0}]'.format(', '.join(names)))
module_src = '\n'.join(module_contents) + '\n'
diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py
index 31356111b..734651193 100644
--- a/yt_dlp/extractor/common.py
+++ b/yt_dlp/extractor/common.py
@@ -458,6 +458,8 @@ class InfoExtractor(object):
@classmethod
def suitable(cls, url):
"""Receives a URL and returns True if suitable for this IE."""
+ # This function must import everything it needs (except other extractors),
+ # so that lazy_extractors works correctly
return cls._match_valid_url(url) is not None
@classmethod
@@ -622,7 +624,7 @@ class InfoExtractor(object):
@classmethod
def ie_key(cls):
"""A string for getting the InfoExtractor with get_info_extractor"""
- return compat_str(cls.__name__[:-2])
+ return cls.__name__[:-2]
@property
def IE_NAME(self):
diff --git a/yt_dlp/extractor/rutube.py b/yt_dlp/extractor/rutube.py
index 01529315f..d027412c4 100644
--- a/yt_dlp/extractor/rutube.py
+++ b/yt_dlp/extractor/rutube.py
@@ -297,6 +297,8 @@ class RutubePlaylistIE(RutubePlaylistBaseIE):
@classmethod
def suitable(cls, url):
+ from ..utils import int_or_none, parse_qs
+
if not super(RutubePlaylistIE, cls).suitable(url):
return False
params = parse_qs(url)
diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py
index 15e0f8adb..236f5809a 100644
--- a/yt_dlp/extractor/youtube.py
+++ b/yt_dlp/extractor/youtube.py
@@ -1837,8 +1837,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
@classmethod
def suitable(cls, url):
- # Hack for lazy extractors until more generic solution is implemented
- # (see #28780)
from ..utils import parse_qs
qs = parse_qs(url)