From b3a67e92d6d4f58d35c47732fec34d7cda9d7df2 Mon Sep 17 00:00:00 2001 From: Hasan Ramezani Date: Mon, 19 Feb 2024 18:59:53 +0100 Subject: [PATCH] Revert "Allow nested env var source to override nested init source." (#243) --- pydantic_settings/sources.py | 6 +++--- tests/test_settings.py | 37 ------------------------------------ 2 files changed, 3 insertions(+), 40 deletions(-) diff --git a/pydantic_settings/sources.py b/pydantic_settings/sources.py index 750d2f3e..82ec7271 100644 --- a/pydantic_settings/sources.py +++ b/pydantic_settings/sources.py @@ -8,10 +8,10 @@ from collections import deque from dataclasses import is_dataclass from pathlib import Path -from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Sequence, Tuple, Union, cast +from typing import TYPE_CHECKING, Any, List, Mapping, Sequence, Tuple, Union, cast from dotenv import dotenv_values -from pydantic import AliasChoices, AliasPath, BaseModel, Json, TypeAdapter +from pydantic import AliasChoices, AliasPath, BaseModel, Json from pydantic._internal._typing_extra import WithArgsTypes, origin_is_union from pydantic._internal._utils import deep_update, is_model_class, lenient_issubclass from pydantic.fields import FieldInfo @@ -165,7 +165,7 @@ def get_field_value(self, field: FieldInfo, field_name: str) -> tuple[Any, str, return None, '', False def __call__(self) -> dict[str, Any]: - return TypeAdapter(Dict[str, Any]).dump_python(self.init_kwargs, by_alias=True) + return self.init_kwargs def __repr__(self) -> str: return f'InitSettingsSource(init_kwargs={self.init_kwargs!r})' diff --git a/tests/test_settings.py b/tests/test_settings.py index dc3bacc9..b0c75e47 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -647,43 +647,6 @@ def settings_customise_sources( assert s.bar == 'env setting' -def test_env_deep_override(env): - class DeepSubModel(BaseModel): - v4: str - - class SubModel(BaseModel): - v1: str - v2: bytes - v3: int - deep: DeepSubModel - - class Settings(BaseSettings, env_nested_delimiter='__'): - v0: str - sub_model: SubModel - - @classmethod - def settings_customise_sources( - cls, settings_cls, init_settings, env_settings, dotenv_settings, file_secret_settings - ): - return env_settings, dotenv_settings, init_settings, file_secret_settings - - env.set('SUB_MODEL__DEEP__V4', 'override-v4') - - s_final = {'v0': '0', 'sub_model': {'v1': 'init-v1', 'v2': b'init-v2', 'v3': 3, 'deep': {'v4': 'override-v4'}}} - - s = Settings(v0='0', sub_model={'v1': 'init-v1', 'v2': b'init-v2', 'v3': 3, 'deep': {'v4': 'init-v4'}}) - assert s.model_dump() == s_final - - s = Settings(v0='0', sub_model=SubModel(v1='init-v1', v2=b'init-v2', v3=3, deep=DeepSubModel(v4='init-v4'))) - assert s.model_dump() == s_final - - s = Settings(v0='0', sub_model=SubModel(v1='init-v1', v2=b'init-v2', v3=3, deep={'v4': 'init-v4'})) - assert s.model_dump() == s_final - - s = Settings(v0='0', sub_model={'v1': 'init-v1', 'v2': b'init-v2', 'v3': 3, 'deep': DeepSubModel(v4='init-v4')}) - assert s.model_dump() == s_final - - def test_config_file_settings_nornir(env): """ See https://github.com/pydantic/pydantic/pull/341#issuecomment-450378771