Ejemplo n.º 1
0
 def update(self, result: ProcessorResult) -> None:
     """ Sets the value of the cell"""
     if isinstance(result.data, Series):
         if result.data.empty:
             self.value = ProcessorResult(False, 'Empty series as a result of processing.')
         else:
             self.value = ProcessorResult(True, result.data.iloc[-1])
     else:
         self.value = ProcessorResult(True, result.data)
     self.updated_time = get_utc_now()
Ejemplo n.º 2
0
    def _process_special_cells(self) -> None:
        """
        Processes Coordinate and Entity cells

        :return: None
        """
        # fetch entity cells
        for cell in self._entity_cells:
            try:
                cell.value = cell.processor.process(cell.entity)
            except Exception as e:
                cell.value = f'Error Calculating processor {cell.processor.__class__.__name__} ' \
                             f'for entity: {cell.entity.get_marquee_id()} due to {e}'

            cell.updated_time = get_utc_now()

        for cell in self._coord_processor_cells:
            try:
                cell.value = cell.processor.process()
            except Exception as e:
                cell.value = f'Error Calculating processor {cell.processor.__class__.__name__} ' \
                             f'for entity: {cell.entity.get_marquee_id()} due to {e}'

            cell.updated_time = get_utc_now()
Ejemplo n.º 3
0
    def initialize(self) -> None:
        """
        Initializes the DataGrid.

        Iterates over all rows and columns, preparing cell structures.
        Cells then contain a graph and data queries to leaf processors.

        Upon providing data to a leaf, the leaf processor is calculated and propagated up the graph to the cell level.
        """
        all_queries: List[DataQueryInfo] = []
        entity_cells: List[DataCell] = []

        current_row_group = None

        # Loop over rows, columns
        for row_index, row in enumerate(self.rows):
            if isinstance(row, RowSeparator):
                current_row_group = row.name
                continue
            entity: Entity = row.entity
            cells: List[DataCell] = []
            row_overrides = row.overrides

            for column_index, column in enumerate(self.columns):
                column_name = column.name
                column_processor = column.processor

                # Get all the data coordinate overrides and apply the processor override if it exists
                data_overrides, value_override, processor_override = _get_overrides(
                    row_overrides, column_name)

                # Create the cell
                cell: DataCell = DataCell(column_name, column_processor,
                                          entity, data_overrides, column_index,
                                          row_index, current_row_group)

                if processor_override:
                    # Check if there is a processor override and apply if so
                    cell.processor = processor_override
                if value_override:
                    cell.value = ProcessorResult(True, value_override.value)
                    cell.updated_time = get_utc_now()
                elif isinstance(column_processor, EntityProcessor):
                    # store these cells to fetch entity data during poll
                    entity_cells.append(cell)
                elif isinstance(column_processor, CoordinateProcessor):
                    # store these cells to fetch entity data during poll
                    if len(data_overrides):
                        # Get the last in the list if more than 1 override is given
                        cell.processor.children['a'].set_dimensions(
                            data_overrides[-1].dimensions)

                    self._coord_processor_cells.append(cell)
                else:
                    # append the required queries to the map
                    cell.build_cell_graph(all_queries)

                cells.append(cell)

            self._cells.extend(cells)
            self.results.append(cells)

        self._data_queries = all_queries
        self._entity_cells = entity_cells
        self.is_initialized = True