Skip to content

Commit 747f364

Browse files
committed
Let data_key default to field name
1 parent df4f811 commit 747f364

3 files changed

Lines changed: 16 additions & 17 deletions

File tree

src/marshmallow/fields.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ def _bind_to_schema(self, field_name, schema):
377377
"""
378378
self.parent = self.parent or schema
379379
self.name = self.name or field_name
380+
self.data_key = self.data_key if self.data_key is not None else field_name
380381
self.root = self.root or (
381382
self.parent.root if isinstance(self.parent, FieldABC) else self.parent
382383
)
@@ -688,7 +689,7 @@ def __init__(
688689
@property
689690
def _field_data_key(self):
690691
only_field = self.schema.fields[self.field_name]
691-
return only_field.data_key or self.field_name
692+
return only_field.data_key
692693

693694
def _serialize(self, nested_obj, attr, obj, **kwargs):
694695
ret = super()._serialize(nested_obj, attr, obj, **kwargs)

src/marshmallow/schema.py

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,7 @@ def _serialize(
520520
value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
521521
if value is missing:
522522
continue
523-
key = field_obj.data_key if field_obj.data_key is not None else attr_name
524-
ret[key] = value
523+
ret[field_obj.data_key] = value
525524
return ret
526525

527526
def dump(self, obj: typing.Any, *, many: typing.Optional[bool] = None):
@@ -634,9 +633,7 @@ def _deserialize(
634633
else:
635634
partial_is_collection = is_collection(partial)
636635
for attr_name, field_obj in self.load_fields.items():
637-
field_name = (
638-
field_obj.data_key if field_obj.data_key is not None else attr_name
639-
)
636+
field_name = field_obj.data_key
640637
raw_value = data.get(field_name, missing)
641638
if raw_value is missing:
642639
# Ignore missing field if we're allowed to.
@@ -669,10 +666,7 @@ def _deserialize(
669666
key = field_obj.attribute or attr_name
670667
set_value(ret_d, key, value)
671668
if unknown != EXCLUDE:
672-
fields = {
673-
field_obj.data_key if field_obj.data_key is not None else field_name
674-
for field_name, field_obj in self.load_fields.items()
675-
}
669+
fields = {field_obj.data_key for field_obj in self.load_fields.values()}
676670
for key in set(data) - fields:
677671
value = data[key]
678672
if unknown == INCLUDE:
@@ -986,10 +980,7 @@ def _init_fields(self) -> None:
986980
if not field_obj.load_only:
987981
dump_fields[field_name] = field_obj
988982

989-
dump_data_keys = [
990-
field_obj.data_key if field_obj.data_key is not None else name
991-
for name, field_obj in dump_fields.items()
992-
]
983+
dump_data_keys = [field_obj.data_key for field_obj in dump_fields.values()]
993984
if len(dump_data_keys) != len(set(dump_data_keys)):
994985
data_keys_duplicates = {
995986
x for x in dump_data_keys if dump_data_keys.count(x) > 1
@@ -1110,9 +1101,7 @@ def _invoke_field_validators(self, *, error_store: ErrorStore, data, many: bool)
11101101
continue
11111102
raise ValueError(f'"{field_name}" field does not exist.') from error
11121103

1113-
data_key = (
1114-
field_obj.data_key if field_obj.data_key is not None else field_name
1115-
)
1104+
data_key = field_obj.data_key
11161105
if many:
11171106
for idx, item in enumerate(data):
11181107
try:

tests/test_fields.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ class MySchema(Schema):
9292
result = MySchema().dump({"name": "Monty", "foo": 42})
9393
assert result == {"_NaMe": "Monty"}
9494

95+
def test_data_key_defaults_to_field_name(self):
96+
class MySchema(Schema):
97+
field_1 = fields.String(data_key="field_one")
98+
field_2 = fields.String()
99+
100+
schema_fields = MySchema().fields
101+
assert schema_fields["field_1"].data_key == "field_one"
102+
assert schema_fields["field_2"].data_key == "field_2"
103+
95104

96105
class TestParentAndName:
97106
class MySchema(Schema):

0 commit comments

Comments
 (0)