Skip to content

Commit

Permalink
fix: failed samples should throw exception
Browse files Browse the repository at this point in the history
  • Loading branch information
zhaoyongjie committed Jun 1, 2022
1 parent 9432c62 commit 34cbdf9
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
* under the License.
*/
import React, { useState, useEffect, useMemo } from 'react';
import { GenericDataType, styled, t } from '@superset-ui/core';
import { ensureIsArray, GenericDataType, styled, t } from '@superset-ui/core';
import Loading from 'src/components/Loading';
import { EmptyStateMedium } from 'src/components/EmptyState';
import TableView, { EmptyWrapperType } from 'src/components/TableView';
Expand Down Expand Up @@ -63,9 +63,9 @@ export const SamplesPane = ({
setIsLoading(true);
getDatasetSamples(datasource.id, queryForce)
.then(response => {
setData(response.data);
setColnames(response.colnames);
setColtypes(response.coltypes);
setData(ensureIsArray(response.data));
setColnames(ensureIsArray(response.colnames));
setColtypes(ensureIsArray(response.coltypes));
setResponseError('');
cache.add(datasource);
if (queryForce && actions) {
Expand Down
8 changes: 1 addition & 7 deletions superset/datasets/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -825,10 +825,4 @@ def samples(self, pk: int) -> Response:
except DatasetForbiddenError:
return self.response_403()
except DatasetSamplesFailedError as ex:
logger.error(
"Error get dataset samples %s: %s",
self.__class__.__name__,
str(ex),
exc_info=True,
)
return self.response_422(message=str(ex))
return self.response_400(message=str(ex))
7 changes: 6 additions & 1 deletion superset/datasets/commands/samples.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
)
from superset.datasets.dao import DatasetDAO
from superset.exceptions import SupersetSecurityException
from superset.utils.core import QueryStatus
from superset.views.base import check_ownership

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -58,7 +59,11 @@ def run(self) -> Dict[str, Any]:
)
results = qc_instance.get_payload()
try:
return results["queries"][0]
sample_data = results["queries"][0]
error_msg = sample_data.get("error")
if sample_data.get("status") == QueryStatus.FAILED and error_msg:
raise DatasetSamplesFailedError(error_msg)
return sample_data
except (IndexError, KeyError) as exc:
raise DatasetSamplesFailedError from exc

Expand Down
20 changes: 20 additions & 0 deletions tests/integration_tests/datasets/api_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1903,3 +1903,23 @@ def test_get_dataset_samples(self):
f' limit {self.app.config["SAMPLES_ROW_LIMIT"]}'
).to_dict(orient="records")
assert eager_samples == rv_data2["result"]["data"]

@pytest.mark.usefixtures("create_datasets")
def test_get_dataset_samples_with_failed_cc(self):
dataset = self.get_fixture_datasets()[0]

self.login(username="admin")
uri = f"api/v1/dataset/{dataset.id}/samples"
failed_column = TableColumn(
column_name="DUMMY CC",
type="VARCHAR(255)",
table=dataset,
expression="INCORRECT SQL",
)
dataset.columns.append(failed_column)
rv = self.client.get(uri)
assert rv.status_code == 400
rv_data = json.loads(rv.data)
assert "message" in rv_data
if dataset.database.db_engine_spec.engine_name == "PostgreSQL":
assert "INCORRECT SQL" in rv_data.get("message")

0 comments on commit 34cbdf9

Please sign in to comment.