Fix discriminator mapping resolution in schemas with parent-child hierarchy #2145
+146
−17
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.
This PR addresses #1832, where using discriminators in schemas with specific property mappings can cause a
RuntimeError: Discriminator type is not found
.Background
The error occurs because the current discriminator mapping resolution fails to properly handle cases where the discriminator field appears in parent models, preventing the correct mapping key from being located.
Problem Description
Previously, the code only checked the
discriminator_model
path against themapping
keys, but it did not account for scenarios where:The discriminator path does not directly match the path of the child models, although it matches their parent classes.
Paths need to be validated in a more recursive fashion, checking both parent and child models for a valid mapping.
Solution
The proposed solution introduces a helper function,
check_paths()
, to validate the paths for both the maindiscriminator_model
and its base classes when the initial mapping fails. This function:Summary
check_paths()
function to handle discriminator mapping resolution.RuntimeError
.