Fix bugs that arise from deserializing dicts with Unions of Instance properties #228
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Deserializing when a
Union
ofInstance
properties is present results in unwanted behavior.'__class__'
was ignored even when that class was a valid choice, and dictionaries were filtered to be empty to match one class, rather than selecting a different class.Now,
deserialize
has additional kwargs:strict
- this requires__class__
to match the deserialized instance AND disallows extra properties in the input dictionaryassert_valid
- deserialization fails if the resulting instance is invalid.To maintain backwards compatibility, both of these are
False
by default, but to fix the aboveUnion
bugs, they areTrue
by default when deserializing theUnion
property. You can keep the current, lenient behavior ofUnion
properties by settingstrict_instances=True
on theUnion
property.