class DataFrameSlot(Slot): def __init__(self, output_module, output_name, input_module, input_name): super(DataFrameSlot, self).__init__(output_module, output_name, input_module, input_name) self.changes = None def last_update(self): if self.changes: return self.changes.last_update() return super(DataFrameSlot, self).last_update() def create_changed(self, buffer_created=True, buffer_updated=False, buffer_deleted=False, manage_columns=True): self.changes = ChangeManager( buffer_created=buffer_created, buffer_updated=buffer_updated, buffer_deleted=buffer_deleted, manage_columns=manage_columns, ) def update(self, run_number, buffer_created=True, buffer_updated=False, buffer_deleted=False, manage_columns=True): if self.changes is None: self.create_changed( buffer_created=buffer_created, buffer_updated=buffer_updated, buffer_deleted=buffer_deleted, manage_columns=manage_columns, ) with self.lock: df = self.data() return self.changes.update(run_number, df) def reset(self): if self.changes is not None: self.changes.reset() def flush_buffers(self): return self.changes.flush_buffers() def flush_created(self): return self.changes.flush_created() def next_created(self, n=None, as_slice=True): return self.changes.next_created(n, as_slice) def has_created(self): if self.changes: return self.changes.has_created() return False def created_length(self): if self.changes: return self.changes.created_length() return 0 def flush_updated(self): return self.changes.flush_updated() def next_updated(self, n=None, as_slice=True): return self.changes.next_updated(n, as_slice) def has_updated(self): if self.changes: return self.changes.has_updated() return False def updated_length(self): return self.changes.updated_length() def flush_deleted(self): return self.changes.flush_deleted() def next_deleted(self, n=None, as_slice=True): return self.changes.next_deleted(n, as_slice) def has_deleted(self): if self.changes: return self.changes.has_deleted() return False def deleted_length(self): return self.changes.deleted_length() def next_state(self): if self.changes: return self.changes.next_state() else: return Module.state_blocked @property def column_changes(self): if self.changes: return self.changes.column_changes else: return None @property def last_index(self): if self.changes: return self.changes.index else: return [] @property def changemanager(self): if self.changes is None: self.changes = self.create_changed() return self.changes