Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: adding a check that alias is validated as an identifier for Python #7319

Merged
Merged
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
10 changes: 10 additions & 0 deletions tests/test_dataclasses.py
Expand Up @@ -2547,3 +2547,13 @@ class Model(BaseModel, Base):
pass

assert Model().a == 5


def test_alias_with_dashes():
"""Test for fix issue #7226."""
@pydantic.dataclasses.dataclass
hramezani marked this conversation as resolved.
Show resolved Hide resolved
class Foo:
some_var: str = Field(alias='some-var')

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