Skip to content

Commit 4b6fd3d

Browse files
authored
Don't explode env vars if env_nested_delimiter is empty (#540)
1 parent 7835118 commit 4b6fd3d

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

pydantic_settings/sources.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,9 @@ def explode_env_vars(self, field_name: str, field: FieldInfo, env_vars: Mapping[
908908
Returns:
909909
A dictionary contains extracted values from nested env values.
910910
"""
911+
if not self.env_nested_delimiter:
912+
return {}
913+
911914
is_dict = lenient_issubclass(get_origin(field.annotation), dict)
912915

913916
prefixes = [

tests/test_settings.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,25 @@ class Settings(BaseSettings):
858858
]
859859

860860

861+
@pytest.mark.parametrize('env_nested_delimiter', [None, ''])
862+
def test_case_sensitive_no_nested_delimiter(monkeypatch, env_nested_delimiter):
863+
class Subsettings(BaseSettings):
864+
foo: str
865+
866+
class Settings(BaseSettings):
867+
subsettings: Subsettings
868+
869+
model_config = SettingsConfigDict(case_sensitive=True, env_nested_delimiter=env_nested_delimiter)
870+
871+
# Need to patch os.environ to get build to work on Windows, where os.environ is case insensitive
872+
monkeypatch.setattr(os, 'environ', value={'subsettingsNonefoo': '1'})
873+
with pytest.raises(ValidationError) as exc_info:
874+
Settings()
875+
assert exc_info.value.errors(include_url=False) == [
876+
{'type': 'missing', 'loc': ('subsettings',), 'msg': 'Field required', 'input': {}}
877+
]
878+
879+
861880
def test_nested_dataclass(env):
862881
@pydantic_dataclasses.dataclass
863882
class DeepNestedDataclass:

0 commit comments

Comments
 (0)