class Column(MkArray, HasSignals): def __init__(self, worksheet, ind): self.data = worksheet.data.columns[ind] self.worksheet = worksheet MkArray.__init__(self, worksheet.data.columns, worksheet.data.columns.data, ind) self.dependencies = set() def reload(self, ind): MkArray.__init__(self, self.worksheet.data.columns, self.worksheet.data.columns.data, ind) self.data = self.worksheet.data.columns[ind] def set_name(self, name): self.data.name = name.encode('utf-8') def get_name(self): return self.data.name.decode('utf-8') name = property(get_name, set_name) def do_set_expr(self, state, expr, setstate=True): # find dependencies and error-check expression self.worksheet.record = set() try: data = asarray(self.worksheet.evaluate(expr)) except Exception, ar: print >>sys.stderr, '*****************', ar raise StopAction, False newdep = self.worksheet.record self.worksheet.record = None # set dependencies for column in newdep - self.dependencies: column.connect('data-changed', self.calculate) for column in self.dependencies - newdep: column.disconnect('data-changed', self.calculate) self.dependencies = newdep # action state if setstate: state['old'], state['new'] = self.expr, expr if self.expr == '': state['olddata'] = self[:] self.data.expr = expr.encode('utf-8') if expr != '': # set data without triggering a action MkArray.__setitem__(self, slice(None), data) self.worksheet.emit('data-changed') self.emit('data-changed') return True
def __setitem__(self, key, value): prev = self[key] MkArray.__setitem__(self, key, value) self.worksheet.emit('data-changed') self.emit('data-changed') return [key, value, prev]
def undo_set_expr(self, state): self.do_set_expr(None, state['old'], setstate=False) if 'olddata' in state: MkArray.__setitem__(self, slice(None), state['olddata'])
def reload(self, ind): MkArray.__init__(self, self.worksheet.data.columns, self.worksheet.data.columns.data, ind) self.data = self.worksheet.data.columns[ind]
def __init__(self, worksheet, ind): self.data = worksheet.data.columns[ind] self.worksheet = worksheet MkArray.__init__(self, worksheet.data.columns, worksheet.data.columns.data, ind) self.dependencies = set()