mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-29 03:23:02 +00:00
[lazy_extractor] Import actual class if an attribute is accessed
Now all core tests pass with lazy extraction enabled
This commit is contained in:
parent
1151c4079a
commit
5bc4a65eea
1 changed files with 14 additions and 6 deletions
|
@ -1,16 +1,24 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
class LazyLoadExtractor(object):
|
class LazyLoadMetaClass(type):
|
||||||
|
def __getattr__(cls, name):
|
||||||
|
return getattr(cls._get_real_class(), name)
|
||||||
|
|
||||||
|
|
||||||
|
class LazyLoadExtractor(metaclass=LazyLoadMetaClass):
|
||||||
_module = None
|
_module = None
|
||||||
|
|
||||||
def __new__(cls, *args, **kwargs):
|
@classmethod
|
||||||
|
def _get_real_class(cls):
|
||||||
|
if '__real_class' not in cls.__dict__:
|
||||||
mod = __import__(cls._module, fromlist=(cls.__name__,))
|
mod = __import__(cls._module, fromlist=(cls.__name__,))
|
||||||
real_cls = getattr(mod, cls.__name__)
|
cls.__real_class = getattr(mod, cls.__name__)
|
||||||
|
return cls.__real_class
|
||||||
|
|
||||||
|
def __new__(cls, *args, **kwargs):
|
||||||
|
real_cls = cls._get_real_class()
|
||||||
instance = real_cls.__new__(real_cls)
|
instance = real_cls.__new__(real_cls)
|
||||||
instance.__init__(*args, **kwargs)
|
instance.__init__(*args, **kwargs)
|
||||||
return instance
|
return instance
|
||||||
|
|
Loading…
Reference in a new issue