66 Users should not need to use this module directly.
77"""
88
9+ from copy import deepcopy
10+
911from marshmallow .exceptions import SCHEMA
1012
1113
@@ -18,6 +20,7 @@ def store_error(self, messages, field_name=SCHEMA, index=None):
1820 # field error -> store/merge error messages under field name key
1921 # schema error -> if string or list, store/merge under _schema key
2022 # -> if dict, store/merge with other top-level keys
23+ messages = deepcopy (messages )
2124 if field_name != SCHEMA or not isinstance (messages , dict ):
2225 messages = {field_name : messages }
2326 if index is not None :
@@ -37,24 +40,26 @@ def merge_errors(errors1, errors2): # noqa: PLR0911
3740 return errors1
3841 if isinstance (errors1 , list ):
3942 if isinstance (errors2 , list ):
40- return errors1 + errors2
43+ errors1 .extend (errors2 )
44+ return errors1
4145 if isinstance (errors2 , dict ):
42- return dict (errors2 , ** {SCHEMA : merge_errors (errors1 , errors2 .get (SCHEMA ))})
43- return [* errors1 , errors2 ]
46+ errors2 [SCHEMA ] = merge_errors (errors1 , errors2 .get (SCHEMA ))
47+ return errors2
48+ errors1 .append (errors2 )
49+ return errors1
4450 if isinstance (errors1 , dict ):
45- if isinstance (errors2 , list ):
46- return dict (errors1 , ** {SCHEMA : merge_errors (errors1 .get (SCHEMA ), errors2 )})
4751 if isinstance (errors2 , dict ):
48- errors = dict (errors1 )
4952 for key , val in errors2 .items ():
50- if key in errors :
51- errors [key ] = merge_errors (errors [key ], val )
53+ if key in errors1 :
54+ errors1 [key ] = merge_errors (errors1 [key ], val )
5255 else :
53- errors [key ] = val
54- return errors
55- return dict (errors1 , ** {SCHEMA : merge_errors (errors1 .get (SCHEMA ), errors2 )})
56+ errors1 [key ] = val
57+ return errors1
58+ errors1 [SCHEMA ] = merge_errors (errors1 .get (SCHEMA ), errors2 )
59+ return errors1
5660 if isinstance (errors2 , list ):
5761 return [errors1 , * errors2 ]
5862 if isinstance (errors2 , dict ):
59- return dict (errors2 , ** {SCHEMA : merge_errors (errors1 , errors2 .get (SCHEMA ))})
63+ errors2 [SCHEMA ] = merge_errors (errors1 , errors2 .get (SCHEMA ))
64+ return errors2
6065 return [errors1 , errors2 ]
0 commit comments