from eventlet import api

def get_ident():
    return id(api.getcurrent())


class local(object):

    def __init__(self):
        self.__dict__['__objs'] = {}

    def __getattr__(self, attr, g=get_ident):
        try:
            return self.__dict__['__objs'][g()][attr]
        except KeyError:
            raise AttributeError(
                "No variable %s defined for the thread %s"
                % (attr, g()))

    def __setattr__(self, attr, value, g=get_ident):
        self.__dict__['__objs'].setdefault(g(), {})[attr] = value

    def __delattr__(self, attr, g=get_ident):
        try:
            del self.__dict__['__objs'][g()][attr]
        except KeyError:
            raise AttributeError(
                "No variable %s defined for thread %s"
                % (attr, g()))
