File tree Expand file tree Collapse file tree 2 files changed +12
-1
lines changed
pydantic_settings/sources Expand file tree Collapse file tree 2 files changed +12
-1
lines changed Original file line number Diff line number Diff line change @@ -268,8 +268,9 @@ def __init__(
268268 init_kwarg_name = init_kwarg_names & set (alias_names )
269269 if init_kwarg_name :
270270 preferred_alias = alias_names [0 ]
271+ preferred_set_alias = next (alias for alias in alias_names if alias in init_kwarg_name )
271272 init_kwarg_names -= init_kwarg_name
272- self .init_kwargs [preferred_alias ] = init_kwargs [init_kwarg_name . pop () ]
273+ self .init_kwargs [preferred_alias ] = init_kwargs [preferred_set_alias ]
273274 self .init_kwargs .update ({key : val for key , val in init_kwargs .items () if key in init_kwarg_names })
274275
275276 super ().__init__ (settings_cls )
Original file line number Diff line number Diff line change @@ -699,6 +699,16 @@ class Example(BaseSettings):
699699 assert Example (name = 'john' , PREFIX_SURNAME = 'doe' ).model_dump () == {'name' : 'john' , 'last_name' : 'doe' }
700700
701701
702+ def test_init_kwargs_alias_resolution_deterministic ():
703+ class Example (BaseSettings ):
704+ name : str
705+ last_name : str = Field (validation_alias = AliasChoices ('surname' , 'last_name' ))
706+
707+ result = Example (name = 'john' , surname = 'doe' , last_name = 'smith' ).model_dump ()
708+
709+ assert result == {'name' : 'john' , 'last_name' : 'doe' }
710+
711+
702712def test_alias_nested_model_default_partial_update ():
703713 class SubModel (BaseModel ):
704714 v1 : str = 'default'
You can’t perform that action at this time.
0 commit comments