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)