Beispiel #1
0
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