def handle_error()

in backend/bms_app/inventory_manager/schema.py [0:0]


    def handle_error(exc, data, **kwargs):
        """Log and raise our custom exception when (de)serialization fails."""
        reversed_err = defaultdict(list)

        def reverse_errors(data, parent=''):
            for key, value in data.items():
                err = f'{parent}.{key}' if parent else key

                if isinstance(value, dict):
                    # skip 1-st level and list index
                    if parent and not isinstance(key, int):
                        sub_parent = f'{parent}.{key}'
                    else:
                        sub_parent = parent or key

                    reverse_errors(value, sub_parent)

                elif isinstance(value, list):
                    for val in value:  # in case of multiple errors
                        if err not in reversed_err[val]:
                            reversed_err[val].append(err)
                else:  # str
                    reversed_err[value].append(err)

        reverse_errors(exc.messages)

        raise ValidationError(reversed_err)