feat: more error messages (#15409)

This commit is contained in:
Beto Dealmeida 2021-06-28 14:51:31 -07:00 committed by GitHub
parent e713912fdf
commit 21d1fb55c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 57 additions and 5 deletions

View File

@ -263,3 +263,11 @@ The database is currently running too many queries.
```
The database might be under heavy load, running too many queries. Please try again later, or contact an administrator for further assistance.
## Issue 1028
```
One or more parameters specified in the query are malformatted.
```
The query contains one or more malformed template parameters. Please check your query and confirm that all template parameters are surround by double braces, for example, "{{ ds }}". Then, try running your query again.

View File

@ -57,6 +57,7 @@ export const ErrorTypeEnum = {
// Sqllab error
MISSING_TEMPLATE_PARAMS_ERROR: 'MISSING_TEMPLATE_PARAMS_ERROR',
INVALID_TEMPLATE_PARAMS_ERROR: 'INVALID_TEMPLATE_PARAMS_ERROR',
RESULTS_BACKEND_NOT_CONFIGURED_ERROR: 'RESULTS_BACKEND_NOT_CONFIGURED_ERROR',
DML_NOT_ALLOWED_ERROR: 'DML_NOT_ALLOWED_ERROR',
INVALID_CTAS_QUERY_ERROR: 'INVALID_CTAS_QUERY_ERROR',

View File

@ -51,6 +51,10 @@ export default function setupErrorMessages() {
ErrorTypeEnum.MISSING_TEMPLATE_PARAMS_ERROR,
ParameterErrorMessage,
);
errorMessageComponentRegistry.registerValue(
ErrorTypeEnum.INVALID_TEMPLATE_PARAMS_ERROR,
ParameterErrorMessage,
);
errorMessageComponentRegistry.registerValue(
ErrorTypeEnum.RESULTS_BACKEND_NOT_CONFIGURED_ERROR,
DatabaseErrorMessage,

View File

@ -66,6 +66,7 @@ class SupersetErrorType(str, Enum):
# Sql Lab errors
MISSING_TEMPLATE_PARAMS_ERROR = "MISSING_TEMPLATE_PARAMS_ERROR"
INVALID_TEMPLATE_PARAMS_ERROR = "INVALID_TEMPLATE_PARAMS_ERROR"
RESULTS_BACKEND_NOT_CONFIGURED_ERROR = "RESULTS_BACKEND_NOT_CONFIGURED_ERROR"
DML_NOT_ALLOWED_ERROR = "DML_NOT_ALLOWED_ERROR"
INVALID_CTAS_QUERY_ERROR = "INVALID_CTAS_QUERY_ERROR"
@ -152,6 +153,15 @@ ERROR_TYPES_TO_ISSUE_CODES_MAPPING = {
),
},
],
SupersetErrorType.INVALID_TEMPLATE_PARAMS_ERROR: [
{
"code": 1028,
"message": _(
"Issue 1028 - One or more parameters specified in the query are "
"malformatted."
),
},
],
SupersetErrorType.RESULTS_BACKEND_NOT_CONFIGURED_ERROR: [
{
"code": 1021,

View File

@ -48,6 +48,19 @@ class SupersetErrorException(SupersetException):
self.error = error
class SupersetGenericErrorException(SupersetErrorException):
"""Exceptions that are too generic to have their own type"""
def __init__(self, message: str) -> None:
super().__init__(
SupersetError(
message=message,
error_type=SupersetErrorType.GENERIC_BACKEND_ERROR,
level=ErrorLevel.ERROR,
)
)
class SupersetErrorFromParamsException(SupersetErrorException):
"""Exceptions that pass in parameters to construct a SupersetError"""
@ -97,11 +110,12 @@ class SupersetTemplateParamsErrorException(SupersetErrorFromParamsException):
def __init__(
self,
message: str,
error: SupersetErrorType,
level: ErrorLevel = ErrorLevel.ERROR,
extra: Optional[Dict[str, Any]] = None,
) -> None:
super().__init__(
SupersetErrorType.MISSING_TEMPLATE_PARAMS_ERROR, message, level, extra,
error, message, level, extra,
)

View File

@ -83,6 +83,7 @@ from superset.exceptions import (
SupersetErrorsException,
SupersetException,
SupersetGenericDBErrorException,
SupersetGenericErrorException,
SupersetSecurityException,
SupersetTemplateParamsErrorException,
SupersetTimeoutException,
@ -2540,7 +2541,12 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
mydb = session.query(Database).get(database_id)
if not mydb:
return json_error_response("Database with id %i is missing.", database_id)
raise SupersetGenericErrorException(
_(
"The database referenced in this query was not found. Please "
"contact an administrator for further assistance or try again."
)
)
# Set tmp_schema_name for CTA
# TODO(bkyryliuk): consider parsing, splitting tmp_schema_name from
@ -2576,9 +2582,14 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
except SQLAlchemyError as ex:
logger.error("Errors saving query details %s", str(ex), exc_info=True)
session.rollback()
raise Exception(_("Query record was not created as expected."))
query_id = None
if not query_id:
raise Exception(_("Query record was not created as expected."))
raise SupersetGenericErrorException(
_(
"The query record was not created as expected. Please "
"contact an administrator for further assistance or try again."
)
)
logger.info("Triggering query_id: %i", query_id)
@ -2600,7 +2611,10 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
query.status = QueryStatus.FAILED
session.commit()
raise SupersetTemplateParamsErrorException(
utils.error_msg_from_exception(ex)
message=_(
'The query contains one or more malformed template parameters. Please check your query and confirm that all template parameters are surround by double braces, for example, "{{ ds }}". Then, try running your query again.'
),
error=SupersetErrorType.INVALID_TEMPLATE_PARAMS_ERROR,
)
if is_feature_enabled("ENABLE_TEMPLATE_PROCESSING"):
@ -2619,6 +2633,7 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
)
+ " "
+ PARAMETER_MISSING_ERR,
error=SupersetErrorType.MISSING_TEMPLATE_PARAMS_ERROR,
extra={
"undefined_parameters": list(undefined_parameters),
"template_parameters": template_params,