@@ -778,8 +778,9 @@ def _field_is_complex(self, field: FieldInfo) -> tuple[bool, bool]:
778
778
# Default value of `case_sensitive` is `None`, because we don't want to break existing behavior.
779
779
# We have to change the method to a non-static method and use
780
780
# `self.case_sensitive` instead in V3.
781
- @staticmethod
782
- def next_field (field : FieldInfo | Any | None , key : str , case_sensitive : bool | None = None ) -> FieldInfo | None :
781
+ def next_field (
782
+ self , field : FieldInfo | Any | None , key : str , case_sensitive : bool | None = None
783
+ ) -> FieldInfo | None :
783
784
"""
784
785
Find the field in a sub model by key(env name)
785
786
@@ -815,21 +816,20 @@ class Cfg(BaseSettings):
815
816
annotation = field .annotation if isinstance (field , FieldInfo ) else field
816
817
if origin_is_union (get_origin (annotation )) or isinstance (annotation , WithArgsTypes ):
817
818
for type_ in get_args (annotation ):
818
- type_has_key = EnvSettingsSource .next_field (type_ , key , case_sensitive )
819
+ type_has_key = self .next_field (type_ , key , case_sensitive )
819
820
if type_has_key :
820
821
return type_has_key
821
822
elif is_model_class (annotation ) or is_pydantic_dataclass (annotation ):
822
823
fields = _get_model_fields (annotation )
823
824
# `case_sensitive is None` is here to be compatible with the old behavior.
824
825
# Has to be removed in V3.
825
826
for field_name , f in fields .items ():
826
- if case_sensitive is None or case_sensitive :
827
- if (field_name == key ) or (isinstance (f .validation_alias , str ) and f .validation_alias == key ):
827
+ for _ , env_name , _ in self ._extract_field_info (f , field_name ):
828
+ if case_sensitive is None or case_sensitive :
829
+ if field_name == key or env_name == key :
830
+ return f
831
+ elif field_name .lower () == key .lower () or env_name .lower () == key .lower ():
828
832
return f
829
- elif (field_name .lower () == key .lower ()) or (
830
- isinstance (f .validation_alias , str ) and f .validation_alias .lower () == key .lower ()
831
- ):
832
- return f
833
833
return None
834
834
835
835
def explode_env_vars (self , field_name : str , field : FieldInfo , env_vars : Mapping [str , str | None ]) -> dict [str , Any ]:
0 commit comments