Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/marshmallow/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -2065,10 +2065,10 @@ class Constant(Field[_ContantT]):
_CHECK_ATTRIBUTE = False

def __init__(self, constant: _ContantT, **kwargs: Unpack[_BaseFieldKwargs]):
kwargs["load_default"] = constant
kwargs["dump_default"] = constant
super().__init__(**kwargs)
self.constant = constant
self.load_default = constant
self.dump_default = constant

def _serialize(self, value, *args, **kwargs) -> _ContantT:
return self.constant
Expand Down
9 changes: 9 additions & 0 deletions tests/test_deserialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -1413,6 +1413,15 @@ class MySchema(Schema):
assert sch.load({})["foo"] == 42
assert sch.load({"foo": 24})["foo"] == 42

def test_constant_none_allows_none_value(self):
class MySchema(Schema):
foo = fields.Constant(None)

sch = MySchema()
assert sch.load({"foo": None})["foo"] is None
assert sch.load({})["foo"] is None
assert sch.load({"foo": "ignored"})["foo"] is None

def test_field_deserialization_with_user_validator_function(self):
field = fields.String(validate=predicate(lambda s: s.lower() == "valid"))
assert field.deserialize("Valid") == "Valid"
Expand Down