You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In v0 this PR aligned lib behaviour with marshmellow, but effectively triggered a couple of unexpected consequences:
People using from_json will start noticing builtin types being implicitly converted when reading json files into dataclasses, and especially booleans receiving valid values from not-very-common-sense values like integers outside 0-1 range and strings
People using from_dict will have even "better" experience when types in their dicts are being overridden by dataclass field type, with implicit conversion as a side-effect
People using marshmellow interop would rejoice
Possible solution
First of all, we should add a flag for implicit coercions:
[tool.dataclasses_json]
coerce_builtins = True
Second, we should do a follow-up discussion re coercion behaviours in from_dict, IMO this should differ from from_json behaviour because from_dict argument carries type information, while from_json has to work with a string.
Description
In v0 this PR aligned lib behaviour with marshmellow, but effectively triggered a couple of unexpected consequences:
from_json
will start noticing builtin types being implicitly converted when reading json files into dataclasses, and especially booleans receiving valid values from not-very-common-sense values like integers outside 0-1 range and stringsfrom_dict
will have even "better" experience when types in their dicts are being overridden by dataclass field type, with implicit conversion as a side-effectPossible solution
First of all, we should add a flag for implicit coercions:
Second, we should do a follow-up discussion re coercion behaviours in
from_dict
, IMO this should differ fromfrom_json
behaviour becausefrom_dict
argument carries type information, whilefrom_json
has to work with a string.Alternatives
N/A
Context
Problem discovered in #466
The text was updated successfully, but these errors were encountered: