Welcome, guest | Sign In | My Account | Store | Cart
def load_setting(key):
    # Just some dummy values for demo
    if key == 'key':
        return '123123'
    elif key == 'limit':
        return 123123
    elif key == 'dummylist':
        return [1, 2, 3, 4, 5]
    elif key == 'crap':
        return {'good': "boy"}

def superlazy(key, default):
    class T(type(default)):
        @staticmethod
        def __loader__():
            ret = load_setting(key)
            if ret:
                setattr(T, '__cache__', ret)
            delattr(T, '__loader__')
        
    def force(k, v):
        def _wrapper(*args, **kwargs):
            if hasattr(T, '__loader__'):
                T.__loader__()
            if hasattr(T, '__cache__'):
                c = T.__cache__
                func = getattr(c, k)
                return func(*args[1:], **kwargs)
            
            return v(*args, **kwargs)

        return _wrapper
    
    t = T(default)
    for k, v in type(default).__dict__.iteritems():
        if (k in ['__doc__']): continue
        setattr(T, k, force(k, v))
    return t

# Lazy string
a = superlazy("key", 'hahahaha')
print a, isinstance(a, str)

# Lazy int
b = superlazy("limit",9)
print 1 + b, isinstance(b, int)
print str(b)

# Lazy list
c = superlazy("dummylist", [1, 2, 3])
print c
print c[0]
print len(c)

# Lazy dict
d = superlazy("crap", {'a': 1, 'b': 2, 'c': 3})
print isinstance(d, dict)
print d
print d.get('a')

# Not existed lazy int, default value is used
e = superlazy("wer", 321)
print isinstance(e, int)
print e

History