aboutsummaryrefslogtreecommitdiffstats
path: root/yt_dlp/extractor/common.py
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2022-09-16 16:37:38 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2022-09-16 17:02:52 +0530
commit2314b4d89fc111ddfcb25937210f1f1c2390cc4a (patch)
tree152d1e66a4e4dc6117b29f87f0dbf88eea3cc904 /yt_dlp/extractor/common.py
parent1060f82f899b61a0a1c63df37ecdf6dc2bae50e8 (diff)
downloadhypervideo-pre-2314b4d89fc111ddfcb25937210f1f1c2390cc4a.tar.lz
hypervideo-pre-2314b4d89fc111ddfcb25937210f1f1c2390cc4a.tar.xz
hypervideo-pre-2314b4d89fc111ddfcb25937210f1f1c2390cc4a.zip
Allow plugin extractors to replace the built-in ones
This allows easier plugin chaining; e.g. - https://gist.github.com/pukkandan/24f13ff1ed385c5a390c1d7bd130d8f7 - https://gist.github.com/pukkandan/fcf5ca1785c80f64e471f0ee14f990fb
Diffstat (limited to 'yt_dlp/extractor/common.py')
-rw-r--r--yt_dlp/extractor/common.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py
index dae952f6a..30042d61f 100644
--- a/yt_dlp/extractor/common.py
+++ b/yt_dlp/extractor/common.py
@@ -5,6 +5,7 @@ import hashlib
import http.client
import http.cookiejar
import http.cookies
+import inspect
import itertools
import json
import math
@@ -3900,6 +3901,18 @@ class InfoExtractor:
"""Only for compatibility with some older extractors"""
return next(iter(cls._extract_embed_urls(None, webpage) or []), None)
+ @classmethod
+ def __init_subclass__(cls, *, plugin_name=None, **kwargs):
+ if plugin_name:
+ mro = inspect.getmro(cls)
+ super_class = cls.__wrapped__ = mro[mro.index(cls) + 1]
+ cls.IE_NAME, cls.ie_key = f'{super_class.IE_NAME}+{plugin_name}', super_class.ie_key
+ while getattr(super_class, '__wrapped__', None):
+ super_class = super_class.__wrapped__
+ setattr(sys.modules[super_class.__module__], super_class.__name__, cls)
+
+ return super().__init_subclass__(**kwargs)
+
class SearchInfoExtractor(InfoExtractor):
"""