File tree Expand file tree Collapse file tree 2 files changed +22
-1
lines changed Expand file tree Collapse file tree 2 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -388,7 +388,17 @@ def __init__(
388388 init_kwargs : dict [str , Any ],
389389 nested_model_default_partial_update : bool | None = None ,
390390 ):
391- self .init_kwargs = init_kwargs
391+ self .init_kwargs = {}
392+ init_kwarg_names = set (init_kwargs .keys ())
393+ for field_name , field_info in settings_cls .model_fields .items ():
394+ alias_names , * _ = _get_alias_names (field_name , field_info )
395+ init_kwarg_name = init_kwarg_names & set (alias_names )
396+ if init_kwarg_name :
397+ preferred_alias = alias_names [0 ]
398+ init_kwarg_names -= init_kwarg_name
399+ self .init_kwargs [preferred_alias ] = init_kwargs [init_kwarg_name .pop ()]
400+ self .init_kwargs .update ({key : val for key , val in init_kwargs .items () if key in init_kwarg_names })
401+
392402 super ().__init__ (settings_cls )
393403 self .nested_model_default_partial_update = (
394404 nested_model_default_partial_update
Original file line number Diff line number Diff line change @@ -662,6 +662,17 @@ def settings_customise_sources(
662662 assert s .model_dump () == s_final
663663
664664
665+ def test_alias_resolution_init_source (env ):
666+ class Example (BaseSettings ):
667+ model_config = SettingsConfigDict (env_prefix = 'PREFIX' )
668+
669+ name : str
670+ last_name : str = Field (validation_alias = AliasChoices ('PREFIX_LAST_NAME' , 'PREFIX_SURNAME' ))
671+
672+ env .set ('PREFIX_SURNAME' , 'smith' )
673+ assert Example (name = 'john' , PREFIX_SURNAME = 'doe' ).model_dump () == {'name' : 'john' , 'last_name' : 'doe' }
674+
675+
665676def test_alias_nested_model_default_partial_update ():
666677 class SubModel (BaseModel ):
667678 v1 : str = 'default'
You can’t perform that action at this time.
0 commit comments