Skip to content

Commit ad07a57

Browse files
authored
Fix a regresion in parsing env value for nested dict (#301)
1 parent bcbfd17 commit ad07a57

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

pydantic_settings/sources.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ def explode_env_vars(self, field_name: str, field: FieldInfo, env_vars: Mapping[
683683
is_complex, allow_json_failure = self._field_is_complex(target_field)
684684
else:
685685
# nested field type is dict
686-
is_complex, allow_json_failure = True, False
686+
is_complex, allow_json_failure = True, True
687687
if is_complex:
688688
try:
689689
env_val = self.decode_complex_value(last_key, target_field, env_val) # type: ignore

tests/test_settings.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3789,6 +3789,17 @@ class Settings(BaseSettings):
37893789
assert s.model_dump() == {'nested': {'foo': {'a': 1}}, 'sub_dict': {'bar': {'foo': {'b': 2}}}}
37903790

37913791

3792+
def test_env_nested_dict_value(env):
3793+
class Settings(BaseSettings):
3794+
nested: Dict[str, Dict[str, Dict[str, str]]]
3795+
3796+
model_config = SettingsConfigDict(env_nested_delimiter='__')
3797+
3798+
env.set('nested__foo__a__b', 'bar')
3799+
s = Settings()
3800+
assert s.model_dump() == {'nested': {'foo': {'a': {'b': 'bar'}}}}
3801+
3802+
37923803
def test_nested_models_leaf_vs_deeper_env_dict_assumed(env):
37933804
class NestedSettings(BaseModel):
37943805
foo: str

0 commit comments

Comments
 (0)