def _handle_and_raise()

in bonsaicli2/bonsai_cli/api.py [0:0]


def _handle_and_raise(response: requests.Response, e: Any, request_id: str):
    """
    This takes an exception and wraps it in a BrainServerError.
    :param response: The response from the server.
    :param e: The error raised by the requests call.
    """
    error_response: Any = {}

    try:
        error_dump = response.json()
    except:
        error_dump = "Unknown server error occurred"

    try:
        error_code = 'Request failed with error code "{}"'.format(
            response.json()["error"]["code"]
        )
    except:
        error_code = ""

    try:
        error_message = "Error message: {}".format(response.json()["error"]["message"])
    except:
        error_message = "Request failed."

    try:
        error_message += " Request ID: {}".format(request_id)
        error_message += " Span ID: {}".format(response.headers["SpanID"])
    except KeyError:
        pass

    try:
        error_response["errorDump"] = error_dump
        error_response["status"] = "Failed"
        error_response["statusCode"] = response.status_code
        error_response["elapsed"] = response.elapsed
        error_response["exception"] = e
        error_response["errorCode"] = error_code
        error_response["errorMessage"] = error_message
        error_response["timeTaken"] = response.headers["x-ms-response-time"]
    except KeyError:
        pass

    raise BrainServerError(error_response)