Skip to content

Commit

Permalink
Adding tests for issue introduced in pydantic-settings 2.2.0 (#39)
Browse files Browse the repository at this point in the history
  • Loading branch information
djpugh authored Feb 25, 2024
1 parent 793bf11 commit e464b3e
Showing 1 changed file with 69 additions and 2 deletions.
71 changes: 69 additions & 2 deletions tests/unit/test_common/test_configuration/test_base_config.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import unittest

from pydantic import ConfigDict
from pydantic import ConfigDict, ValidationError

from nskit.common.configuration import BaseConfiguration
from nskit.common.configuration import BaseConfiguration, SettingsConfigDict
from nskit.common.contextmanagers import ChDir
from nskit.common.io import json, toml, yaml

Expand Down Expand Up @@ -153,3 +153,70 @@ class TestModel(BaseConfiguration):

t = TestModel(a=ASettings(), b=2)

def test_dotenv_extra_ignore(self):

class ASettings(BaseConfiguration):
model_config = SettingsConfigDict(env_prefix='AX_', env_file='.env', dotenv_extra='ignore')
c: str = 'a'
d: int = 1

@property
def a(self):
return True
class TestModel(BaseConfiguration):
model_config = SettingsConfigDict(env_prefix='TM_', env_file='.env', dotenv_extra='ignore')
a: ASettings
b: int

with ChDir():
with open('.env', 'w') as f:
f.write('AX_D=3\nTM_B=4\nAX_R=123\nTM_EE=44')
t = TestModel(a=ASettings())
self.assertEqual(t.b, 4)
self.assertEqual(t.a.d, 3)
self.assertEqual(t.a.c, 'a')

def test_dotenv_extra_forbid_error(self):

class ASettings(BaseConfiguration):
model_config = SettingsConfigDict(env_prefix='AX_', env_file='.env', dotenv_extra='forbid')
c: str = 'a'
d: int = 1

@property
def a(self):
return True
class TestModel(BaseConfiguration):
model_config = SettingsConfigDict(env_prefix='TM_', env_file='.env', dotenv_extra='forbid')
a: ASettings
b: int

with ChDir():
with open('.env', 'w') as f:
f.write('AX_D=3\nTM_B=4\nAX_R=123\nTM_EE=44')
with self.assertRaises(ValidationError):
TestModel(a=ASettings())

def test_dotenv_extra_forbid_ok(self):

class ASettings(BaseConfiguration):
model_config = SettingsConfigDict(env_prefix='AX_', dotenv_extra='forbid')
c: str = 'a'
d: int = 1

@property
def a(self):
return True
class TestModel(BaseConfiguration):
model_config = SettingsConfigDict(env_prefix='TM_', env_file='.env', dotenv_extra='forbid')
a: ASettings
b: int

with ChDir():
with open('.env', 'w') as f:
f.write('TM_B=4\n')
t = TestModel(a=ASettings())
self.assertEqual(t.b, 4)
self.assertEqual(t.a.d, 1)
self.assertEqual(t.a.c, 'a')

0 comments on commit e464b3e

Please sign in to comment.