This is an automated email from the ASF dual-hosted git repository. maximebeauchemin pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push: new 2bc089e Added new exception class and start of better exception/error handling (#4514) 2bc089e is described below commit 2bc089ef8dcec5d98a43cb2ec80aacf1cdc706cf Author: Hugh A. Miles II <hughmi...@gmail.com> AuthorDate: Sun Mar 11 22:07:51 2018 -0700 Added new exception class and start of better exception/error handling (#4514) * rebase and linting * change back * wip * fixed broken test * fix flake8 * fix test --- superset/connectors/base/views.py | 2 +- superset/connectors/druid/models.py | 3 ++- superset/db_engine_specs.py | 3 ++- superset/exceptions.py | 30 ++++++++++++++++++++++++++++++ superset/utils.py | 26 ++------------------------ superset/views/core.py | 7 ++++++- superset/viz.py | 1 + tests/utils_tests.py | 4 ++-- 8 files changed, 46 insertions(+), 30 deletions(-) diff --git a/superset/connectors/base/views.py b/superset/connectors/base/views.py index 42ce670..7d54dcf 100644 --- a/superset/connectors/base/views.py +++ b/superset/connectors/base/views.py @@ -6,7 +6,7 @@ from __future__ import unicode_literals from flask import Markup -from superset.utils import SupersetException +from superset.exceptions import SupersetException from superset.views.base import SupersetModelView diff --git a/superset/connectors/druid/models.py b/superset/connectors/druid/models.py index 0541af0..caef04b 100644 --- a/superset/connectors/druid/models.py +++ b/superset/connectors/druid/models.py @@ -35,11 +35,12 @@ from sqlalchemy.orm import backref, relationship from superset import conf, db, import_util, sm, utils from superset.connectors.base.models import BaseColumn, BaseDatasource, BaseMetric +from superset.exceptions import MetricPermException from superset.models.helpers import ( AuditMixinNullable, ImportMixin, QueryResult, set_perm, ) from superset.utils import ( - DimSelector, DTTM_ALIAS, flasher, MetricPermException, + DimSelector, DTTM_ALIAS, flasher, ) DRUID_TZ = conf.get('DRUID_TZ') diff --git a/superset/db_engine_specs.py b/superset/db_engine_specs.py index 73f8677..200b047 100644 --- a/superset/db_engine_specs.py +++ b/superset/db_engine_specs.py @@ -38,7 +38,8 @@ import unicodecsv from werkzeug.utils import secure_filename from superset import app, cache_util, conf, db, utils -from superset.utils import QueryStatus, SupersetTemplateException +from superset.exceptions import SupersetTemplateException +from superset.utils import QueryStatus config = app.config diff --git a/superset/exceptions.py b/superset/exceptions.py new file mode 100644 index 0000000..569a74b --- /dev/null +++ b/superset/exceptions.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + + +class SupersetException(Exception): + status = 500 + + +class SupersetTimeoutException(SupersetException): + pass + + +class SupersetSecurityException(SupersetException): + pass + + +class MetricPermException(SupersetException): + pass + + +class NoDataException(SupersetException): + status = 400 + + +class SupersetTemplateException(SupersetException): + pass diff --git a/superset/utils.py b/superset/utils.py index ab3cef8..bb43edc 100644 --- a/superset/utils.py +++ b/superset/utils.py @@ -45,6 +45,8 @@ import sqlalchemy as sa from sqlalchemy import event, exc, select from sqlalchemy.types import TEXT, TypeDecorator +from superset.exceptions import SupersetException, SupersetTimeoutException + logging.getLogger('MARKDOWN').setLevel(logging.INFO) @@ -53,30 +55,6 @@ EPOCH = datetime(1970, 1, 1) DTTM_ALIAS = '__timestamp' -class SupersetException(Exception): - pass - - -class SupersetTimeoutException(SupersetException): - pass - - -class SupersetSecurityException(SupersetException): - pass - - -class MetricPermException(SupersetException): - pass - - -class NoDataException(SupersetException): - pass - - -class SupersetTemplateException(SupersetException): - pass - - def can_access(sm, permission_name, view_name, user): """Protecting from has_access failing from missing perms/view""" if user.is_anonymous(): diff --git a/superset/views/core.py b/superset/views/core.py index 3b18e82..ad06b25 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -38,6 +38,7 @@ from superset import ( ) from superset.connectors.connector_registry import ConnectorRegistry from superset.connectors.sqla.models import AnnotationDatasource, SqlaTable +from superset.exceptions import SupersetException, SupersetSecurityException from superset.forms import CsvToDatabaseForm from superset.legacy import cast_form_data import superset.models.core as models @@ -115,7 +116,7 @@ def check_ownership(obj, raise_if_false=True): if not obj: return False - security_exception = utils.SupersetSecurityException( + security_exception = SupersetSecurityException( "You don't have the rights to alter [{}]".format(obj)) if g.user.is_anonymous(): @@ -1099,6 +1100,10 @@ class Superset(BaseSupersetView): try: payload = viz_obj.get_payload() + except SupersetException as se: + logging.exception(se) + return json_error_response(utils.error_msg_from_exception(se), + status=se.status) except Exception as e: logging.exception(e) return json_error_response(utils.error_msg_from_exception(e)) diff --git a/superset/viz.py b/superset/viz.py index 9bbf538..756fedc 100644 --- a/superset/viz.py +++ b/superset/viz.py @@ -37,6 +37,7 @@ from six.moves import cPickle as pkl, reduce from superset import app, cache, get_manifest_file, utils from superset.utils import DTTM_ALIAS, merge_extra_filters + config = app.config stats_logger = config.get('STATS_LOGGER') diff --git a/tests/utils_tests.py b/tests/utils_tests.py index 674c6f4..fa1c7b0 100644 --- a/tests/utils_tests.py +++ b/tests/utils_tests.py @@ -12,11 +12,11 @@ import uuid from mock import patch import numpy +from superset.exceptions import SupersetException from superset.utils import ( base_json_conv, datetime_f, json_int_dttm_ser, json_iso_dttm_ser, JSONEncodedDict, memoized, merge_extra_filters, merge_request_params, - parse_human_timedelta, - SupersetException, validate_json, zlib_compress, zlib_decompress_to_string, + parse_human_timedelta, validate_json, zlib_compress, zlib_decompress_to_string, ) -- To stop receiving notification emails like this one, please contact maximebeauche...@apache.org.