]> jfr.im git - yt-dlp.git/blobdiff - devscripts/lazy_load_template.py
[cleanup] Misc cleanup
[yt-dlp.git] / devscripts / lazy_load_template.py
index d06655d106513394e70efdd1ef2c7af8d4faa9da..cdafaf1ef6799dedc2bac12f97582411da530d87 100644 (file)
@@ -1,20 +1,33 @@
-#!/usr/bin/env python3
-# coding: utf-8
-from __future__ import unicode_literals
-
+import importlib
+import random
 import re
 
+from ..utils import (
+    age_restricted,
+    bug_reports_message,
+    classproperty,
+    write_string,
+)
+
+
+class LazyLoadMetaClass(type):
+    def __getattr__(cls, name):
+        # "_TESTS" bloat the lazy_extractors
+        if '_real_class' not in cls.__dict__ and name != 'get_testcases':
+            write_string(
+                'WARNING: Falling back to normal extractor since lazy extractor '
+                f'{cls.__name__} does not have attribute {name}{bug_reports_message()}\n')
+        return getattr(cls.real_class, name)
 
-class LazyLoadExtractor(object):
-    _module = None
 
-    @classmethod
-    def ie_key(cls):
-        return cls.__name__[:-2]
+class LazyLoadExtractor(metaclass=LazyLoadMetaClass):
+    @classproperty
+    def real_class(cls):
+        if '_real_class' not in cls.__dict__:
+            cls._real_class = getattr(importlib.import_module(cls._module), cls.__name__)
+        return cls._real_class
 
     def __new__(cls, *args, **kwargs):
-        mod = __import__(cls._module, fromlist=(cls.__name__,))
-        real_cls = getattr(mod, cls.__name__)
-        instance = real_cls.__new__(real_cls)
+        instance = cls.real_class.__new__(cls.real_class)
         instance.__init__(*args, **kwargs)
         return instance