From 1ffbd95579ce4926af095793d4a03c7baf6680a7 Mon Sep 17 00:00:00 2001 From: Oliver Berger Date: Wed, 24 Apr 2024 10:19:30 +0200 Subject: [PATCH] fix: a second level of environment nesting expected a dict (#281) --- pydantic_settings/sources.py | 3 ++- tests/test_settings.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pydantic_settings/sources.py b/pydantic_settings/sources.py index 9c2462ed..eba1fca2 100644 --- a/pydantic_settings/sources.py +++ b/pydantic_settings/sources.py @@ -620,7 +620,8 @@ def explode_env_vars(self, field_name: str, field: FieldInfo, env_vars: Mapping[ target_field: FieldInfo | None = field for key in keys: target_field = self.next_field(target_field, key) - env_var = env_var.setdefault(key, {}) + if isinstance(env_var, dict): + env_var = env_var.setdefault(key, {}) # get proper field with last_key target_field = self.next_field(target_field, last_key) diff --git a/tests/test_settings.py b/tests/test_settings.py index b2663cf0..13598bec 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -2602,5 +2602,9 @@ class Settings(BaseSettings): 'nested__foo__bar', 'this should not be evaluated, since foo is a string by annotation and not a dict', ) + env.set( + 'nested__foo__bar__baz', + 'one more', + ) s = Settings() assert s.model_dump() == {'nested': {'foo': 'string'}}