Skip to content

Commit

Permalink
Raise ValidationError for unhashable discriminator values
Browse files Browse the repository at this point in the history
Fixes #4773
  • Loading branch information
kurtmckee committed Mar 2, 2023
1 parent c706515 commit a7e96d3
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 4 deletions.
1 change: 1 addition & 0 deletions changes/4773-kurtmckee.md
@@ -0,0 +1 @@
Raise `ValidationError`, not `ConfigError`, when a discriminator value is unhashable.
11 changes: 7 additions & 4 deletions pydantic/fields.py
Expand Up @@ -1117,15 +1117,18 @@ def _validate_discriminated_union(
except (AttributeError, TypeError):
return v, ErrorWrapper(MissingDiscriminator(discriminator_key=self.discriminator_key), loc)

try:
sub_field = self.sub_fields_mapping[discriminator_value] # type: ignore[index]
except TypeError:
if self.sub_fields_mapping is None:
assert cls is not None
raise ConfigError(
f'field "{self.name}" not yet prepared so type is still a ForwardRef, '
f'you might need to call {cls.__name__}.update_forward_refs().'
)
except KeyError:

try:
sub_field = self.sub_fields_mapping[discriminator_value] # type: ignore[index]
except (KeyError, TypeError):
# KeyError: `discriminator_value` is not in the dictionary.
# TypeError: `discriminator_value` is unhashable.
assert self.sub_fields_mapping is not None
return v, ErrorWrapper(
InvalidDiscriminator(
Expand Down

0 comments on commit a7e96d3

Please sign in to comment.