Closed
Description
When I have the next Models:
from pydantic import BaseModel
from pydantic_settings import BaseSettings
class DatabaseSettings(BaseModel):
name: str = "test"
env: str = "test"
class Settings(BaseSettings):
db1: DatabaseSettings = DatabaseSettings(name="database1")
db2: DatabaseSettings = DatabaseSettings(name="database2")
print(Settings(db1={"env": "prd"}))
I will get:
db1=DatabaseSettings(name='test', env='prd') db2=DatabaseSettings(name='database2', env='test')
However, I would expect:
db1=DatabaseSettings(name='database1', env='prd') db2=DatabaseSettings(name='database2', env='test')
I have written a small PydanticBaseSettingsSource fixes this behavior:
class FromClsSettings(pydantic_settings.PydanticBaseSettingsSource):
def get_field_value(self, **kwargs) -> None: # type: ignore[override] # noqa: ANN003
pass
def __call__(self) -> dict[str, Any]:
data = {}
for field, field_info in self.settings_cls.model_fields.items():
if isinstance(field_info.default, pydantic.BaseModel):
data[field] = field_info.default.model_dump()
return data
Is the issue the expected behavior? Is the proposed solution the correct one? Shall I make a PR?
Metadata
Metadata
Assignees
Labels
No labels