示例#1
0
 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
示例#2
0
 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
示例#3
0
    def __init__(self, source=None, factory=None, cachedir=None, index=None,
                 cnames=None, name=None, columns=None, is_client=True, kw={}):
        if cachedir and not os.path.exists(cachedir):
            os.makedirs(cachedir)
        self.__cachedir__ = cachedir
        self.__source__ = source
        self.__factory__ = factory
        self.__index__ = index

        #cnames and source.cnames
        def __cnames():
            __cnames = None
            if cnames:
                if hasattr(cnames, '__call__'):
                    __cnames = cnames(self)
                elif isinstance(cnames, str):
                    __cnames = cnames.split(',')
                else:
                    __cnames = cnames
            else:
                __cnames = []
                if source is not None:
                    __cnames += source.__cnames__
                if kw:
                    __cnames += [x for x in kw.keys() if x not in __cnames]
            return __cnames
        self.__cnames__ = __cnames()

        if columns is not None:
            for name, value in zip(self.__cnames__, columns):
                setattr(self, name, value)

        if name is None:
            if source is not None:
                name = source.__name__
            else:
                name = 'element_%s' % id(self)
        self.__name__ = name

        self.__columns__ = columns
        self.__is_client__ = is_client
        for name, value in kw.items():
            if isinstance(value, str):
                value = getcolumn(self, value)
            elif hasattr(value, '__call__'):
                value = value(self)
                if isinstance(value, list):
                    value = Atom.fromlist(value)
                value = value
            if isinstance(value, list):
                value = Atom.fromlist(value)
            elif isinstance(value, np.ndarray) and not isinstance(value, Atom):
                value = Atom(value)
            setattr(self, name, value)

        if cachedir is not None:
            for name in self.__cnames__:
                if not Atom.is_cached(cachedir, name):
                    getattr(self, name).persist(cachedir, name)
示例#4
0
    def __init__(self,
                 source=None,
                 factory=None,
                 cachedir=None,
                 index=None,
                 cnames=None,
                 name=None,
                 columns=None,
                 is_client=True,
                 kw={}):
        if cachedir and not os.path.exists(cachedir):
            os.makedirs(cachedir)
        self.__cachedir__ = cachedir
        self.__source__ = source
        self.__factory__ = factory
        self.__index__ = index

        #cnames and source.cnames
        def __cnames():
            __cnames = None
            if cnames:
                if hasattr(cnames, '__call__'):
                    __cnames = cnames(self)
                elif isinstance(cnames, str):
                    __cnames = cnames.split(',')
                else:
                    __cnames = cnames
            else:
                __cnames = []
                if source is not None:
                    __cnames += source.__cnames__
                if kw:
                    __cnames += [x for x in kw.keys() if x not in __cnames]
            return __cnames

        self.__cnames__ = __cnames()

        if columns is not None:
            for name, value in zip(self.__cnames__, columns):
                setattr(self, name, value)

        if name is None:
            if source is not None:
                name = source.__name__
            else:
                name = 'element_%s' % id(self)
        self.__name__ = name

        self.__columns__ = columns
        self.__is_client__ = is_client
        for name, value in kw.items():
            if isinstance(value, str):
                value = getcolumn(self, value)
            elif hasattr(value, '__call__'):
                value = value(self)
                if isinstance(value, list):
                    value = Atom.fromlist(value)
                value = value
            if isinstance(value, list):
                value = Atom.fromlist(value)
            elif isinstance(value, np.ndarray) and not isinstance(value, Atom):
                value = Atom(value)
            setattr(self, name, value)

        if cachedir is not None:
            for name in self.__cnames__:
                if not Atom.is_cached(cachedir, name):
                    getattr(self, name).persist(cachedir, name)