Source code for rest_witchcraft.utils

from django.core.exceptions import NON_FIELD_ERRORS, ValidationError as DjangoValidationError

from rest_framework.serializers import ValidationError
from rest_framework.settings import api_settings


def _django_to_drf(e):
    if hasattr(e, "error_dict") or isinstance(e, dict):
        return {
            k if k != NON_FIELD_ERRORS else api_settings.NON_FIELD_ERRORS_KEY: _django_to_drf(v)
            for k, v in getattr(e, "error_dict", e).items()
        }

    elif hasattr(e, "error_list"):
        return e.messages
    elif isinstance(e, list):
        errors = []
        for j in e:
            if isinstance(j, DjangoValidationError):
                errors += _django_to_drf(j)
            else:
                errors.append(_django_to_drf(j))
        return errors
    return e


[docs]def django_to_drf_validation_error(e): return ValidationError( _django_to_drf(e) if hasattr(e, "error_dict") else {api_settings.NON_FIELD_ERRORS_KEY: e.messages} )