Ejemplo n.º 1
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)
Ejemplo n.º 2
0
def attrs(self, **new_columns):
    cnames = self.__cnames__[:]
    new = Element(source=self)
    for name, val in new_columns.items():
        if isinstance(val, str):
            attr = getcolumn(new, val)
        elif hasattr(val, '__call__'):
            val = val(self)
            if isinstance(val, list):
                val = Atom.fromlist(val)
            attr = val
        elif isinstance(val, list):
            attr = Atom.fromlist(val)
        else:
            attr = val
        setattr(new, name, attr)
        if name not in cnames:
            cnames.append(name)
    new.__cnames__ = cnames
    return new
Ejemplo n.º 3
0
def attrs(self, **new_columns):
    cnames = self.__cnames__[:]
    new    = Element(source=self)
    for name, val in new_columns.items():
        if isinstance(val, str):
            attr = getcolumn(new, val)
        elif hasattr(val, '__call__'):
            val = val(self)
            if isinstance(val, list):
                val = Atom.fromlist(val)
            attr = val
        elif isinstance(val, list):
            attr = Atom.fromlist(val)
        else:
            attr = val
        setattr(new, name, attr)
        if name not in cnames:
            cnames.append(name)
    new.__cnames__ = cnames
    return new
Ejemplo n.º 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)