fix(sql lab): Syntax errors should return with 422 status (#20491)

* fix(sql lab): Syntax errors should return with 422 status

* refactor
This commit is contained in:
Diego Medina 2022-07-27 15:41:17 -03:00 committed by GitHub
parent 8b354b4b69
commit 383313b105
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 3 deletions

View File

@ -115,6 +115,14 @@ class SupersetErrorsException(SupersetException):
self.status = status
class SupersetSyntaxErrorException(SupersetErrorsException):
status = 422
error_type = SupersetErrorType.SYNTAX_ERROR
def __init__(self, errors: List[SupersetError]) -> None:
super().__init__(errors)
class SupersetTimeoutException(SupersetErrorFromParamsException):
status = 408

View File

@ -25,8 +25,13 @@ from flask_babel import gettext as __
from superset.commands.base import BaseCommand
from superset.common.db_query_status import QueryStatus
from superset.dao.exceptions import DAOCreateFailedError
from superset.errors import SupersetErrorType
from superset.exceptions import SupersetErrorsException, SupersetGenericErrorException
from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
from superset.exceptions import (
SupersetErrorsException,
SupersetException,
SupersetGenericErrorException,
SupersetSyntaxErrorException,
)
from superset.models.core import Database
from superset.models.sql_lab import Query
from superset.sqllab.command_status import SqlJsonExecutionStatus
@ -110,7 +115,21 @@ class ExecuteSqlCommand(BaseCommand):
"status": status,
"payload": self._execution_context_convertor.serialize_payload(),
}
except (SqlLabException, SupersetErrorsException) as ex:
except SupersetErrorsException as ex:
if all(ex.error_type == SupersetErrorType.SYNTAX_ERROR for ex in ex.errors):
raise SupersetSyntaxErrorException(ex.errors) from ex
raise ex
except SupersetException as ex:
if ex.error_type == SupersetErrorType.SYNTAX_ERROR:
raise SupersetSyntaxErrorException(
[
SupersetError(
message=ex.message,
error_type=ex.error_type,
level=ErrorLevel.ERROR,
)
]
) from ex
raise ex
except Exception as ex:
raise SqlLabException(self._execution_context, exception=ex) from ex