Improving Presto error message in explore/dashboard (#2633)

* Improving Presto error message in explore/dashboard

* lint
This commit is contained in:
Maxime Beauchemin 2017-04-18 12:30:17 -07:00 committed by GitHub
parent ac51a30f98
commit cb3384b3b2
3 changed files with 14 additions and 10 deletions

View File

@ -57,7 +57,7 @@ export default class DisplayQueryButton extends React.PureComponent {
}); });
} }
beforeOpen() { beforeOpen() {
if (this.props.chartStatus === 'loading' || this.props.chartStatus === null) { if (['loading', null].indexOf(this.props.chartStatus) >= 0 || !this.props.queryResponse) {
this.fetchQuery(); this.fetchQuery();
} else { } else {
this.setStateFromQueryResponse(); this.setStateFromQueryResponse();
@ -72,11 +72,13 @@ export default class DisplayQueryButton extends React.PureComponent {
/>); />);
} else if (this.state.error) { } else if (this.state.error) {
return <pre>{this.state.error}</pre>; return <pre>{this.state.error}</pre>;
} else if (this.state.query) {
return (
<SyntaxHighlighter language={this.state.language} style={github}>
{this.state.query}
</SyntaxHighlighter>);
} }
return ( return null;
<SyntaxHighlighter language={this.state.language} style={github}>
{this.state.query}
</SyntaxHighlighter>);
} }
render() { render() {
return ( return (

View File

@ -547,7 +547,8 @@ class SqlaTable(Model, BaseDatasource):
except Exception as e: except Exception as e:
status = QueryStatus.FAILED status = QueryStatus.FAILED
logging.exception(e) logging.exception(e)
error_message = str(e) error_message = (
self.database.db_engine_spec.extract_error_message(e))
return QueryResult( return QueryResult(
status=status, status=status,

View File

@ -484,11 +484,12 @@ class PrestoEngineSpec(BaseEngineSpec):
@classmethod @classmethod
def extract_error_message(cls, e): def extract_error_message(cls, e):
if hasattr(e, 'orig') \ if (
and type(e.orig).__name__ == 'DatabaseError' \ hasattr(e, 'orig') and
and isinstance(e.orig[0], dict): type(e.orig).__name__ == 'DatabaseError' and
isinstance(e.orig[0], dict)):
error_dict = e.orig[0] error_dict = e.orig[0]
e = '{} at {}: {}'.format( return '{} at {}: {}'.format(
error_dict['errorName'], error_dict['errorName'],
error_dict['errorLocation'], error_dict['errorLocation'],
error_dict['message'] error_dict['message']