You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2021/06/30 02:34:23 UTC

[superset] branch master updated: chore: simplify errors and issue codes (#15437)

This is an automated email from the ASF dual-hosted git repository.

beto pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 5181a74  chore: simplify errors and issue codes (#15437)
5181a74 is described below

commit 5181a74116d0f9ae22a20a5f507bfa6ee90734db
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Tue Jun 29 19:33:28 2021 -0700

    chore: simplify errors and issue codes (#15437)
---
 superset/errors.py | 360 +++++++++++++----------------------------------------
 1 file changed, 89 insertions(+), 271 deletions(-)

diff --git a/superset/errors.py b/superset/errors.py
index d2845aa..3ae8fab 100644
--- a/superset/errors.py
+++ b/superset/errors.py
@@ -86,277 +86,83 @@ class SupersetErrorType(str, Enum):
     INVALID_PAYLOAD_SCHEMA_ERROR = "INVALID_PAYLOAD_SCHEMA_ERROR"
 
 
+ISSUE_CODES = {
+    1000: _("The datasource is too large to query."),
+    1001: _("The database is under an unusual load."),
+    1002: _("The database returned an unexpected error."),
+    1003: _(
+        "There is a syntax error in the SQL query. "
+        "Perhaps there was a misspelling or a typo."
+    ),
+    1004: _("The column was deleted or renamed in the database."),
+    1005: _("The table was deleted or renamed in the database."),
+    1006: _("One or more parameters specified in the query are missing."),
+    1007: _("The hostname provided can't be resolved."),
+    1008: _("The port is closed."),
+    1009: _("The host might be down, and can't be reached on the provided port."),
+    1010: _("Superset encountered an error while running a command."),
+    1011: _("Superset encountered an unexpected error."),
+    1012: _("The username provided when connecting to a database is not valid."),
+    1013: _("The password provided when connecting to a database is not valid."),
+    1014: _("Either the username or the password is wrong."),
+    1015: _("Either the database is spelled incorrectly or does not exist."),
+    1016: _("The schema was deleted or renamed in the database."),
+    1017: _("User doesn't have the proper permissions."),
+    1018: _("One or more parameters needed to configure a database are missing."),
+    1019: _("The submitted payload has the incorrect format."),
+    1020: _("The submitted payload has the incorrect schema."),
+    1021: _("Results backend needed for asynchronous queries is not configured."),
+    1022: _("Database does not allow data manipulation."),
+    1023: _(
+        "The CTAS (create table as select) doesn't have a "
+        "SELECT statement at the end. Please make sure your query has a "
+        "SELECT as its last statement. Then, try running your query again."
+    ),
+    1024: _("CVAS (create view as select) query has more than one statement."),
+    1025: _("CVAS (create view as select) query is not a SELECT statement."),
+    1026: _("Query is too complex and takes too long to run."),
+    1027: _("The database is currently running too many queries."),
+    1028: _("One or more parameters specified in the query are malformatted."),
+    1029: _("The object does not exist in the given database."),
+    1030: _("The query has a syntax error."),
+    1031: _("The results backend no longer has the data from the query."),
+    1032: _("The query associated with the results was deleted."),
+    1033: _(
+        "The results stored in the backend were stored in a "
+        "different format, and no longer can be deserialized."
+    ),
+}
+
+
 ERROR_TYPES_TO_ISSUE_CODES_MAPPING = {
-    SupersetErrorType.BACKEND_TIMEOUT_ERROR: [
-        {
-            "code": 1000,
-            "message": _("Issue 1000 - The datasource is too large to query."),
-        },
-        {
-            "code": 1001,
-            "message": _("Issue 1001 - The database is under an unusual load."),
-        },
-    ],
-    SupersetErrorType.GENERIC_DB_ENGINE_ERROR: [
-        {
-            "code": 1002,
-            "message": _("Issue 1002 - The database returned an unexpected error."),
-        }
-    ],
-    SupersetErrorType.COLUMN_DOES_NOT_EXIST_ERROR: [
-        {
-            "code": 1003,
-            "message": _(
-                "Issue 1003 - There is a syntax error in the SQL query. "
-                "Perhaps there was a misspelling or a typo."
-            ),
-        },
-        {
-            "code": 1004,
-            "message": _(
-                "Issue 1004 - The column was deleted or renamed in the database."
-            ),
-        },
-    ],
-    SupersetErrorType.TABLE_DOES_NOT_EXIST_ERROR: [
-        {
-            "code": 1003,
-            "message": _(
-                "Issue 1003 - There is a syntax error in the SQL query. "
-                "Perhaps there was a misspelling or a typo."
-            ),
-        },
-        {
-            "code": 1005,
-            "message": _(
-                "Issue 1005 - The table was deleted or renamed in the database."
-            ),
-        },
-    ],
-    SupersetErrorType.SCHEMA_DOES_NOT_EXIST_ERROR: [
-        {
-            "code": 1003,
-            "message": _(
-                "Issue 1003 - There is a syntax error in the SQL query. "
-                "Perhaps there was a misspelling or a typo."
-            ),
-        },
-        {
-            "code": 1016,
-            "message": _(
-                "Issue 1005 - The schema was deleted or renamed in the database."
-            ),
-        },
-    ],
-    SupersetErrorType.MISSING_TEMPLATE_PARAMS_ERROR: [
-        {
-            "code": 1006,
-            "message": _(
-                "Issue 1006 - One or more parameters specified in the query are "
-                "missing."
-            ),
-        },
-    ],
-    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,
-            "message": _(
-                "Issue 1021 - Results backend needed for asynchronous queries "
-                "is not configured."
-            ),
-        },
-    ],
-    SupersetErrorType.DML_NOT_ALLOWED_ERROR: [
-        {
-            "code": 1022,
-            "message": _("Issue 1022 - Database does not allow data manipulation."),
-        },
-    ],
-    SupersetErrorType.CONNECTION_INVALID_HOSTNAME_ERROR: [
-        {
-            "code": 1007,
-            "message": _("Issue 1007 - The hostname provided can't be resolved."),
-        },
-    ],
-    SupersetErrorType.CONNECTION_PORT_CLOSED_ERROR: [
-        {"code": 1008, "message": _("Issue 1008 - The port is closed.")},
-    ],
-    SupersetErrorType.CONNECTION_HOST_DOWN_ERROR: [
-        {
-            "code": 1009,
-            "message": _(
-                "Issue 1009 - The host might be down, and can't be reached on the "
-                "provided port."
-            ),
-        },
-    ],
-    SupersetErrorType.GENERIC_COMMAND_ERROR: [
-        {
-            "code": 1010,
-            "message": _(
-                "Issue 1010 - Superset encountered an error while running a command."
-            ),
-        },
-    ],
-    SupersetErrorType.GENERIC_BACKEND_ERROR: [
-        {
-            "code": 1011,
-            "message": _("Issue 1011 - Superset encountered an unexpected error."),
-        },
-    ],
-    SupersetErrorType.CONNECTION_INVALID_USERNAME_ERROR: [
-        {
-            "code": 1012,
-            "message": _(
-                "Issue 1012 - The username provided when "
-                "connecting to a database is not valid."
-            ),
-        },
-    ],
-    SupersetErrorType.CONNECTION_INVALID_PASSWORD_ERROR: [
-        {
-            "code": 1013,
-            "message": _(
-                "Issue 1013 - The password provided when "
-                "connecting to a database is not valid."
-            ),
-        },
-    ],
-    SupersetErrorType.CONNECTION_ACCESS_DENIED_ERROR: [
-        {
-            "code": 1014,
-            "message": _("Issue 1014 - Either the username or the password is wrong."),
-        },
-        {
-            "code": 1015,
-            "message": _(
-                "Issue 1015 - Either the database is "
-                "spelled incorrectly or does not exist."
-            ),
-        },
-    ],
-    SupersetErrorType.CONNECTION_UNKNOWN_DATABASE_ERROR: [
-        {
-            "code": 1015,
-            "message": _(
-                "Issue 1015 - Either the database is "
-                "spelled incorrectly or does not exist."
-            ),
-        }
-    ],
-    SupersetErrorType.CONNECTION_DATABASE_PERMISSIONS_ERROR: [
-        {
-            "code": 1017,
-            "message": _("Issue 1017 - User doesn't have the proper permissions."),
-        },
-    ],
-    SupersetErrorType.CONNECTION_MISSING_PARAMETERS_ERROR: [
-        {
-            "code": 1018,
-            "message": _(
-                "Issue 1018 - One or more parameters needed to configure a "
-                "database are missing."
-            ),
-        },
-    ],
-    SupersetErrorType.INVALID_PAYLOAD_FORMAT_ERROR: [
-        {
-            "code": 1019,
-            "message": _(
-                "Issue 1019 - The submitted payload has the incorrect format."
-            ),
-        }
-    ],
-    SupersetErrorType.INVALID_PAYLOAD_SCHEMA_ERROR: [
-        {
-            "code": 1020,
-            "message": _(
-                "Issue 1020 - The submitted payload has the incorrect schema."
-            ),
-        }
-    ],
-    SupersetErrorType.INVALID_CTAS_QUERY_ERROR: [
-        {
-            "code": 1023,
-            "message": _(
-                "Issue 1023 - The CTAS (create table as select) doesn't have a "
-                "SELECT statement at the end. Please make sure your query has a "
-                "SELECT as its last statement. Then, try running your query again."
-            ),
-        },
-    ],
-    SupersetErrorType.INVALID_CVAS_QUERY_ERROR: [
-        {
-            "code": 1024,
-            "message": _(
-                "Issue 1024 - CVAS (create view as select) query has more than "
-                "one statement."
-            ),
-        },
-        {
-            "code": 1025,
-            "message": _(
-                "Issue 1025 - CVAS (create view as select) query is not a "
-                "SELECT statement."
-            ),
-        },
-    ],
-    SupersetErrorType.SQLLAB_TIMEOUT_ERROR: [
-        {
-            "code": 1026,
-            "message": _(
-                "Issue 1026 - Query is too complex and takes too long to run."
-            ),
-        },
-        {
-            "code": 1027,
-            "message": _(
-                "Issue 1027 - The database is currently running too many queries."
-            ),
-        },
-    ],
-    SupersetErrorType.OBJECT_DOES_NOT_EXIST_ERROR: [
-        {
-            "code": 1029,
-            "message": _(
-                "Issue 1029 - The object does not exist in the given database."
-            ),
-        },
-    ],
-    SupersetErrorType.SYNTAX_ERROR: [
-        {"code": 1030, "message": _("Issue 1030 - The query has a syntax error.")},
-    ],
-    SupersetErrorType.RESULTS_BACKEND_ERROR: [
-        {
-            "code": 1031,
-            "message": _(
-                "Issue 1031 - The results backend no longer has the data from the "
-                "query."
-            ),
-        },
-        {
-            "code": 1032,
-            "message": _(
-                "Issue 1032 - The query associated with the results was deleted."
-            ),
-        },
-        {
-            "code": 1033,
-            "message": _(
-                "Issue 1033 - The results stored in the backend were stored in a "
-                "different format, and no longer can be deserialized."
-            ),
-        },
-    ],
+    SupersetErrorType.BACKEND_TIMEOUT_ERROR: [1000, 1001],
+    SupersetErrorType.GENERIC_DB_ENGINE_ERROR: [1002],
+    SupersetErrorType.COLUMN_DOES_NOT_EXIST_ERROR: [1003, 1004],
+    SupersetErrorType.TABLE_DOES_NOT_EXIST_ERROR: [1003, 1005],
+    SupersetErrorType.SCHEMA_DOES_NOT_EXIST_ERROR: [1003, 1016],
+    SupersetErrorType.MISSING_TEMPLATE_PARAMS_ERROR: [1006],
+    SupersetErrorType.INVALID_TEMPLATE_PARAMS_ERROR: [1028],
+    SupersetErrorType.RESULTS_BACKEND_NOT_CONFIGURED_ERROR: [1021],
+    SupersetErrorType.DML_NOT_ALLOWED_ERROR: [1022],
+    SupersetErrorType.CONNECTION_INVALID_HOSTNAME_ERROR: [1007],
+    SupersetErrorType.CONNECTION_PORT_CLOSED_ERROR: [1008],
+    SupersetErrorType.CONNECTION_HOST_DOWN_ERROR: [1009],
+    SupersetErrorType.GENERIC_COMMAND_ERROR: [1010],
+    SupersetErrorType.GENERIC_BACKEND_ERROR: [1011],
+    SupersetErrorType.CONNECTION_INVALID_USERNAME_ERROR: [1012],
+    SupersetErrorType.CONNECTION_INVALID_PASSWORD_ERROR: [1013],
+    SupersetErrorType.CONNECTION_ACCESS_DENIED_ERROR: [1014, 1015],
+    SupersetErrorType.CONNECTION_UNKNOWN_DATABASE_ERROR: [1015],
+    SupersetErrorType.CONNECTION_DATABASE_PERMISSIONS_ERROR: [1017],
+    SupersetErrorType.CONNECTION_MISSING_PARAMETERS_ERROR: [1018],
+    SupersetErrorType.INVALID_PAYLOAD_FORMAT_ERROR: [1019],
+    SupersetErrorType.INVALID_PAYLOAD_SCHEMA_ERROR: [1020],
+    SupersetErrorType.INVALID_CTAS_QUERY_ERROR: [1023],
+    SupersetErrorType.INVALID_CVAS_QUERY_ERROR: [1024, 1025],
+    SupersetErrorType.SQLLAB_TIMEOUT_ERROR: [1026, 1027],
+    SupersetErrorType.OBJECT_DOES_NOT_EXIST_ERROR: [1029],
+    SupersetErrorType.SYNTAX_ERROR: [1030],
+    SupersetErrorType.RESULTS_BACKEND_ERROR: [1031, 1032, 1033],
 }
 
 
@@ -391,4 +197,16 @@ class SupersetError:
         issue_codes = ERROR_TYPES_TO_ISSUE_CODES_MAPPING.get(self.error_type)
         if issue_codes:
             self.extra = self.extra or {}
-            self.extra.update({"issue_codes": issue_codes})
+            self.extra.update(
+                {
+                    "issue_codes": [
+                        {
+                            "code": issue_code,
+                            "message": (
+                                f"Issue {issue_code} - {ISSUE_CODES[issue_code]}"
+                            ),
+                        }
+                        for issue_code in issue_codes
+                    ]
+                }
+            )