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__(
388
388
init_kwargs : dict [str , Any ],
389
389
nested_model_default_partial_update : bool | None = None ,
390
390
):
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
+
392
402
super ().__init__ (settings_cls )
393
403
self .nested_model_default_partial_update = (
394
404
nested_model_default_partial_update
Original file line number Diff line number Diff line change @@ -662,6 +662,17 @@ def settings_customise_sources(
662
662
assert s .model_dump () == s_final
663
663
664
664
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
+
665
676
def test_alias_nested_model_default_partial_update ():
666
677
class SubModel (BaseModel ):
667
678
v1 : str = 'default'
You can’t perform that action at this time.
0 commit comments