Commit b84f9459 authored by Ahmed Awan's avatar Ahmed Awan
Browse files

[23.1] Handle missing indexer for a dataset

In case a dataset does not have an indexer, raise an exception.
Fixes the bug mentioned in https://github.com/galaxyproject/galaxy/pull/17639#issuecomment-1995990448
parent a3c14eaa
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -868,7 +868,7 @@ class DatasetsService(ServiceBase, UsesVisualizationMixin):
        # Coverage mode uses index data.
        if mode == "Coverage":
            # Get summary using minimal cutoffs.
            indexer = self.data_provider_registry.get_data_provider(trans, original_dataset=dataset, source="index")
            indexer = self._get_indexer(trans, dataset)
            return indexer.get_data(chrom, low, high, **kwargs)

        # TODO:
@@ -878,7 +878,7 @@ class DatasetsService(ServiceBase, UsesVisualizationMixin):
        # If mode is Auto, need to determine what type of data to return.
        if mode == "Auto":
            # Get stats from indexer.
            indexer = self.data_provider_registry.get_data_provider(trans, original_dataset=dataset, source="index")
            indexer = self._get_indexer(trans, dataset)
            stats = indexer.get_data(chrom, low, high, stats=True)

            # If stats were requested, return them.
@@ -929,7 +929,7 @@ class DatasetsService(ServiceBase, UsesVisualizationMixin):

            # Get mean depth.
            if not indexer:
                indexer = self.data_provider_registry.get_data_provider(trans, original_dataset=dataset, source="index")
                indexer = self._get_indexer(trans, dataset)
            stats = indexer.get_data(chrom, low, high, stats=True)
            mean_depth = stats["data"]["mean"]

@@ -981,3 +981,12 @@ class DatasetsService(ServiceBase, UsesVisualizationMixin):
        data = data_provider.get_data(**kwargs)

        return data

    def _get_indexer(self, trans, dataset):
        try:
            indexer = self.data_provider_registry.get_data_provider(trans, original_dataset=dataset, source="index")
            if indexer is None:
                raise Exception("No indexer available for this dataset")
            return indexer
        except Exception as e:
            raise galaxy_exceptions.ObjectNotFound(f"Error getting indexer: {util.unicodify(e)}")