diff options
author | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-05-11 21:24:44 +0530 |
---|---|---|
committer | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-05-13 00:23:26 +0530 |
commit | 82d020804de938bb7e87bd6bbc4961757b892cd0 (patch) | |
tree | 6ef8184da2e2ebe93ea235df8d92b644470e8690 /devscripts/lazy_load_template.py | |
parent | 7ddbf09c2570d79baed8154e07ff7ee404ccc17c (diff) | |
download | hypervideo-pre-82d020804de938bb7e87bd6bbc4961757b892cd0.tar.lz hypervideo-pre-82d020804de938bb7e87bd6bbc4961757b892cd0.tar.xz hypervideo-pre-82d020804de938bb7e87bd6bbc4961757b892cd0.zip |
[extractor] Use classmethod/property where possible
and refactor lazy extractors accordingly.
This reduces the need to create extractor instances
Diffstat (limited to 'devscripts/lazy_load_template.py')
-rw-r--r-- | devscripts/lazy_load_template.py | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/devscripts/lazy_load_template.py b/devscripts/lazy_load_template.py index e4b4f5825..6d9b27742 100644 --- a/devscripts/lazy_load_template.py +++ b/devscripts/lazy_load_template.py @@ -1,30 +1,28 @@ +import importlib +import random import re -from ..utils import bug_reports_message, write_string +from ..utils import bug_reports_message, classproperty, write_string class LazyLoadMetaClass(type): def __getattr__(cls, name): - if '_real_class' not in cls.__dict__: + # "is_suitable" requires "_TESTS". However, they bloat the lazy_extractors + if '_real_class' not in cls.__dict__ and name not in ('is_suitable', 'get_testcases'): write_string( 'WARNING: Falling back to normal extractor since lazy extractor ' - f'{cls.__name__} does not have attribute {name}{bug_reports_message()}') - return getattr(cls._get_real_class(), name) + f'{cls.__name__} does not have attribute {name}{bug_reports_message()}\n') + return getattr(cls.real_class, name) class LazyLoadExtractor(metaclass=LazyLoadMetaClass): - _module = None - _WORKING = True - - @classmethod - def _get_real_class(cls): + @classproperty + def real_class(cls): if '_real_class' not in cls.__dict__: - mod = __import__(cls._module, fromlist=(cls.__name__,)) - cls._real_class = getattr(mod, cls.__name__) + cls._real_class = getattr(importlib.import_module(cls._module), cls.__name__) return cls._real_class def __new__(cls, *args, **kwargs): - real_cls = cls._get_real_class() - instance = real_cls.__new__(real_cls) + instance = cls.real_class.__new__(cls.real_class) instance.__init__(*args, **kwargs) return instance |