I think this is not the best solution but it helped me as a hot fix:
class BaseSchema(Schema):
def dump(self, obj: Any, *, many: Optional[bool] = None):
if obj is None:
return {}
return super().dump(obj, many=many)
def dumps(self, obj: Any, *args, many: Optional[bool] = None, **kwargs):
if obj is None:
return {}
return super().dumps(obj, *args, many=many, **kwargs)
def load(self, data: Union[Mapping[str, Any], Iterable[Mapping[str, Any]]], *, many: Optional[bool] = None,
partial: Optional[Union[bool, types.StrSequenceOrSet]] = None, unknown: Optional[str] = None):
if not data:
return None
return super().load(data, many=many, partial=partial, unknown=unknown)
def loads(self, json_data: str, *, many: Optional[bool] = None,
partial: Optional[Union[bool, types.StrSequenceOrSet]] = None,
unknown: Optional[str] = None, **kwargs):
if not json_data or json_data == '{}':
return None
return super().loads(json_data, many=many, partial=partial, unknown=unknown, **kwargs)
PeriodSchema = marshmallow_dataclass.class_schema(Period, base_schema=BaseSchema)
In short, we just override used methods and check for empty dictionaries and strings.