@@ -661,7 +661,9 @@ def get_field_value(self, field: FieldInfo, field_name: str) -> tuple[Any, str,
661661 a flag to determine whether value is complex.
662662 """
663663
664- for field_key , env_name , value_is_complex in self ._extract_field_info (field , field_name ):
664+ field_infos = self ._extract_field_info (field , field_name )
665+ preferred_key , * _ = field_infos [0 ]
666+ for field_key , env_name , value_is_complex in field_infos :
665667 # paths reversed to match the last-wins behaviour of `env_file`
666668 for secrets_path in reversed (self .secrets_paths ):
667669 path = self .find_case_path (secrets_path , env_name , self .case_sensitive )
@@ -670,14 +672,16 @@ def get_field_value(self, field: FieldInfo, field_name: str) -> tuple[Any, str,
670672 continue
671673
672674 if path .is_file ():
673- return path .read_text ().strip (), field_key , value_is_complex
675+ if value_is_complex or (self .config .get ('populate_by_name' , False ) and (field_key == field_name )):
676+ preferred_key = field_key
677+ return path .read_text ().strip (), preferred_key , value_is_complex
674678 else :
675679 warnings .warn (
676680 f'attempted to load secret file "{ path } " but found a { path_type_label (path )} instead.' ,
677681 stacklevel = 4 ,
678682 )
679683
680- return None , field_key , value_is_complex
684+ return None , preferred_key , value_is_complex
681685
682686 def __repr__ (self ) -> str :
683687 return f'{ self .__class__ .__name__ } (secrets_dir={ self .secrets_dir !r} )'
@@ -725,12 +729,16 @@ def get_field_value(self, field: FieldInfo, field_name: str) -> tuple[Any, str,
725729 """
726730
727731 env_val : str | None = None
728- for field_key , env_name , value_is_complex in self ._extract_field_info (field , field_name ):
732+ field_infos = self ._extract_field_info (field , field_name )
733+ preferred_key , * _ = field_infos [0 ]
734+ for field_key , env_name , value_is_complex in field_infos :
729735 env_val = self .env_vars .get (env_name )
730736 if env_val is not None :
737+ if value_is_complex or (self .config .get ('populate_by_name' , False ) and (field_key == field_name )):
738+ preferred_key = field_key
731739 break
732740
733- return env_val , field_key , value_is_complex
741+ return env_val , preferred_key , value_is_complex
734742
735743 def prepare_field_value (self , field_name : str , field : FieldInfo , value : Any , value_is_complex : bool ) -> Any :
736744 """
0 commit comments