13 # These bloat the lazy_extractors, so allow them to passthrough silently
14 ALLOWED_CLASSMETHODS
= {'extract_from_webpage', 'get_testcases', 'get_webpage_testcases'}
18 class LazyLoadMetaClass(type):
19 def __getattr__(cls
, name
):
21 if ('_real_class' not in cls
.__dict
__
22 and name
not in ALLOWED_CLASSMETHODS
and not _WARNED
):
24 write_string('WARNING: Falling back to normal extractor since lazy extractor '
25 f
'{cls.__name__} does not have attribute {name}{bug_reports_message()}\n')
26 return getattr(cls
.real_class
, name
)
29 class LazyLoadExtractor(metaclass
=LazyLoadMetaClass
):
32 if '_real_class' not in cls
.__dict
__:
33 cls
._real
_class
= getattr(importlib
.import_module(cls
._module
), cls
.__name
__)
34 return cls
._real
_class
36 def __new__(cls
, *args
, **kwargs
):
37 instance
= cls
.real_class
.__new
__(cls
.real_class
)
38 instance
.__init
__(*args
, **kwargs
)