aboutsummaryrefslogtreecommitdiffstats
path: root/devscripts/lazy_load_template.py
blob: 036e2e767c703448a0010aa034162a7a582a82f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# coding: utf-8
import re


class LazyLoadMetaClass(type):
    def __getattr__(cls, name):
        return getattr(cls._get_real_class(), name)


class LazyLoadExtractor(metaclass=LazyLoadMetaClass):
    _module = None
    _WORKING = True

    @classmethod
    def _get_real_class(cls):
        if '__real_class' not in cls.__dict__:
            mod = __import__(cls._module, fromlist=(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.__init__(*args, **kwargs)
        return instance