#! -*- coding: utf-8 -*-


# author: forcemain@163.com


import logging


from rest_framework.status import HTTP_200_OK
from rest_framework.views import exception_handler
from rest_framework.exceptions import APIException


from . import settings
from .helper import is_pretty


logger = logging.getLogger('django')


def drf_exception_handler(exc, context):
    response = exception_handler(exc, context)
    if not response and settings.CATCH_ALL_EXCEPTIONS:
        logging.exception(exc)
        exc = APIException(exc)
        response = exception_handler(exc, context)
    if response is not None:
        response.status_code = HTTP_200_OK
        if is_pretty(response):
            return response
        error_message = response.data.pop('detail', '')
        error_code = settings.FRIENDLY_EXCEPTION_DICT.get(
            exc.__class__.__name__)
        response.data['code'] = error_code
        response.data['message'] = error_message

    return response