def __getattr__(self, name): attr = None if self.__cachedir__ and Atom.is_cached(self.__cachedir__, name): attr = Atom.load(self.__cachedir__, name, is_client=self.__is_client__) setattr(self, name, attr) return attr if self.__source__ is None and self.__factory__ is not None: source = self.__factory__() self.__source__ = source #Not really the right place for this. #if self.__cachedir__ is not None: # print '%s = %s' % (self.__cachedir__, len(self)) if self.__source__ is not None: attr = getattr(self.__source__, name) if attr is not None and self.__index__ is not None: #Although this is simple and effective it is not very efficienct # a = Ai(Bi(C[xy]))) #Using this method: # ax = Cx[Bi][Ai], xy = ay[Bi][Ai] #A better approach is to calculate the index then apply it # bai = Bi[Ai], ax = Cx[bai], ay = Cx[bai] attr = attr[self.__index__] if attr is not None: setattr(self, name, attr) return attr