# Copyright 2019 Huawei Technologies Co., Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================ """Handle custom error.""" from urllib.parse import quote from werkzeug.exceptions import NotFound from werkzeug.exceptions import MethodNotAllowed from flask import request, jsonify from mindinsight.datavisual.common.exceptions import RequestMethodNotAllowed from mindinsight.datavisual.common.exceptions import RestfulApiNotExist from mindinsight.datavisual.common.log import restful_logger as logger from mindinsight.utils.exceptions import UnknownError from mindinsight.utils.exceptions import FileSystemPermissionError def handle_http_exception_error(ex): """Handle http exception error.""" logger.warning('%r %r, detail: %r', request.method, quote(request.path), str(ex)) if isinstance(ex, NotFound): error = RestfulApiNotExist() elif isinstance(ex, MethodNotAllowed): error = RequestMethodNotAllowed() else: logger.exception(ex) error = UnknownError('System error or http error.') res_body = {"error_code": error.error_code, "error_msg": error.message} return jsonify(res_body), error.http_code def handle_mindinsight_error(ex): """Handle mindinsight error.""" if int(ex.http_code) < 500: logger.warning('%r %r detail: %r', request.method, quote(request.path), ex.message) else: logger.error('%r %r detail: %r', request.method, quote(request.path), ex.message) logger.exception(ex) res_body = dict(error_code=ex.error_code, error_msg=ex.message) return jsonify(res_body), ex.http_code def handle_unknown_error(ex): """Handle unknown error.""" logger.error('%r %r detail: %r', request.method, quote(request.path), str(ex)) logger.exception(ex) if isinstance(ex, PermissionError): error = FileSystemPermissionError('File System Permission Error') else: error = UnknownError('System error.') res_body = dict(error_code=error.error_code, error_msg=error.message) return jsonify(res_body), error.http_code