Skip to content

Commit

Permalink
fix: adding a check that alias is validated as an identifier for Pyth…
Browse files Browse the repository at this point in the history
…on (#7319)

Co-authored-by: Andrzej Jończy <andrzej.jonczy@mgbi.pl>
Co-authored-by: Hasan Ramezani <hasan.r67@gmail.com>
  • Loading branch information
3 people committed Sep 4, 2023
1 parent a380749 commit 99555e9
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
11 changes: 7 additions & 4 deletions pydantic/_internal/_dataclasses.py
Expand Up @@ -22,6 +22,7 @@
from ._generics import get_standard_typevars_map
from ._mock_val_ser import set_dataclass_mock_validator
from ._schema_generation_shared import CallbackGetCoreSchemaHandler
from ._utils import is_valid_identifier

if typing.TYPE_CHECKING:
from ..config import ConfigDict
Expand Down Expand Up @@ -204,10 +205,12 @@ def generate_dataclass_signature(cls: type[StandardDataclass]) -> Signature:

# Replace the field name with the alias if present
name = param.name
if param_default.validation_alias is None and isinstance(param_default.alias, str):
name = param_default.alias
elif isinstance(param_default.validation_alias, str):
name = param_default.validation_alias
alias = param_default.alias
validation_alias = param_default.validation_alias
if validation_alias is None and isinstance(alias, str) and is_valid_identifier(alias):
name = alias
elif isinstance(validation_alias, str) and is_valid_identifier(validation_alias):
name = validation_alias

# Replace the field default
default = param_default.default
Expand Down
11 changes: 11 additions & 0 deletions tests/test_dataclasses.py
Expand Up @@ -2547,3 +2547,14 @@ class Model(BaseModel, Base):
pass

assert Model().a == 5


def test_alias_with_dashes():
"""Test for fix issue #7226."""

@pydantic.dataclasses.dataclass
class Foo:
some_var: str = Field(alias='some-var')

obj = Foo(**{'some-var': 'some_value'})
assert obj.some_var == 'some_value'

0 comments on commit 99555e9

Please sign in to comment.