-
-
Notifications
You must be signed in to change notification settings - Fork 110
Closed
Description
Initial Checks
- I have searched GitHub for a duplicate issue and I'm sure this is something new
- I have searched Google & StackOverflow for a solution and couldn't find anything
- I have read and followed the docs and still think this is a bug
- I am confident that the issue is with pydantic (not my code, or another library in the ecosystem like FastAPI or mypy)
Description
Hi,
I am following the example for nesting a BaseSettings class with BaseModels and I am using env_nested_delimiter = '_'.
Running the example code I get:
pydantic.error_wrappers.ValidationError: 4 validation errors for Settings
sub_model -> v1
field required (type=value_error.missing)
sub_model -> v2
field required (type=value_error.missing)
sub_model -> v3
field required (type=value_error.missing)
sub_model -> deep
field required (type=value_error.missing)
While it looks possible to use the single underscore delimiter, the values are not picked up and I am not sure which ones the settings object is looking for in this example.
Example Code
import os
from unittest import TestCase
from pydantic import BaseModel, BaseSettings
class DeepSubModel(BaseModel):
v4: str
class SubModel(BaseModel):
v1: str
v2: bytes
v3: int
deep: DeepSubModel
class Settings(BaseSettings):
v0: str
sub_model: SubModel
class Config:
env_nested_delimiter = '_'
env_prefix = 'TEST_'
class TestConfig(TestCase):
def setUp(self) -> None:
self.original_env = os.environ.copy()
def tearDown(self) -> None:
os.environ.clear()
os.environ.update(self.original_env)
def test_nested_delimiter(self):
os.environ['TEST_V0'] = 'v0'
os.environ['TEST_SUB_MODEL_V1'] = 'v1'
os.environ['TEST_SUB_MODEL_V2'] = 'v2'
os.environ['TEST_SUB_MODEL_V3'] = '3'
os.environ['TEST_SUB_MODEL_DEEP_V4'] = 'v4'
config = Settings()
self.assertEqual(config.v0, 'v0')
self.assertEqual(config.sub_model.v1, 'v1')
self.assertEqual(config.sub_model.v2, b'v2')
self.assertEqual(config.sub_model.v3, 3)
self.assertEqual(config.sub_model.deep.v4, 'v4')Python, Pydantic & OS Version
pydantic version: 1.10.2
pydantic compiled: True
install path: /Users/petroslabropoulos/Projects/workable/ml-utils/.venv/lib/python3.10/site-packages/pydantic
python version: 3.10.5 (main, Jul 20 2022, 15:20:07) [Clang 13.1.6 (clang-1316.0.21.2.5)]
platform: macOS-13.3.1-x86_64-i386-64bit
optional deps. installed: ['dotenv', 'typing-extensions']
Affected Components
- Compatibility between releases
- Data validation/parsing
- Data serialization -
.dict()and.json() - JSON Schema
- Dataclasses
- Model Config
- Field Types - adding or changing a particular data type
- Function validation decorator
- Generic Models
- Other Model behaviour -
construct(), pickling, private attributes, ORM mode - Plugins and integration with other tools - mypy, FastAPI, python-devtools, Hypothesis, VS Code, PyCharm, etc.
a1d4r
Metadata
Metadata
Assignees
Labels
No labels