def _test_calculator(self): self.dframe = self.dataset.dframe() columns = self.dframe.columns.tolist() self.start_num_cols = len(columns) self.added_num_cols = 0 column_labels_to_slugs = { column_attrs[Dataset.LABEL]: (column_name) for (column_name, column_attrs) in self.dataset.schema.items() } self.label_list, self.slugified_key_list = [ list(ary) for ary in zip(*column_labels_to_slugs.items()) ] for idx, formula in enumerate(self.calculations): name = 'test-%s' % idx Parser.validate_formula(formula, self.dataset) calculation = Calculation() calculation.save(self.dataset, formula, name, self.group) self.now = now() calculate_columns(self.dataset, [calculation]) self.column_labels_to_slugs = self.dataset.schema.labels_to_slugs self._test_calculation_results(name, formula)
def calculate_task(calculations, dataset): """Background task to run a calculation. Set calculation to failed and raise if an exception occurs. :param calculation: Calculation to run. :param dataset: Dataset to run calculation on. """ # block until other calculations for this dataset are finished calculations[0].restart_if_has_pending(dataset, calculations[1:]) calculate_columns(dataset.reload(), calculations) for calculation in calculations: calculation.add_dependencies( dataset, Parser.dependent_columns(calculation.formula, dataset)) if calculation.aggregation is not None: aggregated_id = dataset.aggregated_datasets_dict[calculation.group] calculation.set_aggregation_id(aggregated_id) calculation.ready()