Skip to content

Commit 489a8d4

Browse files
committed
Only deep copy error message collections
1 parent 6d4a17d commit 489a8d4

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/marshmallow/error_store.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
Users should not need to use this module directly.
77
"""
88

9-
from copy import deepcopy
10-
119
from marshmallow.exceptions import SCHEMA
1210

1311

@@ -20,13 +18,19 @@ def store_error(self, messages, field_name=SCHEMA, index=None):
2018
# field error -> store/merge error messages under field name key
2119
# schema error -> if string or list, store/merge under _schema key
2220
# -> if dict, store/merge with other top-level keys
23-
messages = deepcopy(messages)
21+
messages = copy_containers(messages)
2422
if field_name != SCHEMA or not isinstance(messages, dict):
2523
messages = {field_name: messages}
2624
if index is not None:
2725
messages = {index: messages}
2826
self.errors = merge_errors(self.errors, messages)
2927

28+
def copy_containers(errors):
29+
if isinstance(errors, list):
30+
return [copy_containers(val) for val in errors]
31+
if isinstance(errors, dict):
32+
return {key: copy_containers(val) for key, val in errors.items()}
33+
return errors
3034

3135
def merge_errors(errors1, errors2): # noqa: PLR0911
3236
"""Deeply merge two error messages.

0 commit comments

Comments
 (0)