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)
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