Skip to content

Commit 779a2fb

Browse files
committed
added a support to get pydantic class type instead of instance
1 parent 65d3513 commit 779a2fb

2 files changed

Lines changed: 15 additions & 16 deletions

File tree

src/dependency_injector/providers.pyx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,7 @@ cdef dict pydantic_settings_to_dict(settings, dict kwargs):
157157
)
158158

159159
if isinstance(settings, type) and issubclass(settings, PydanticSettings):
160-
raise Error(
161-
"Got settings class, but expect instance: "
162-
"instead \"{0}\" use \"{0}()\"".format(settings.__name__)
163-
)
160+
settings = settings()
164161

165162
if not isinstance(settings, PydanticSettings):
166163
raise Error(

tests/unit/providers/configuration/test_from_pydantic_py36.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -168,21 +168,23 @@ def test_option_not_instance_of_settings(config):
168168

169169

170170
def test_subclass_instead_of_instance(config):
171-
with raises(errors.Error) as error:
172-
config.from_pydantic(Settings1)
173-
assert error.value.args[0] == (
174-
"Got settings class, but expect instance: "
175-
"instead \"Settings1\" use \"Settings1()\""
176-
)
171+
config.from_pydantic(Settings1)
172+
173+
assert config() == {"section1": {"value1": 1}, "section2": {"value2": 2}}
174+
assert config.section1() == {"value1": 1}
175+
assert config.section1.value1() == 1
176+
assert config.section2() == {"value2": 2}
177+
assert config.section2.value2() == 2
177178

178179

179180
def test_option_subclass_instead_of_instance(config):
180-
with raises(errors.Error) as error:
181-
config.option.from_pydantic(Settings1)
182-
assert error.value.args[0] == (
183-
"Got settings class, but expect instance: "
184-
"instead \"Settings1\" use \"Settings1()\""
185-
)
181+
config.option.from_pydantic(Settings1)
182+
183+
assert config.option() == {"section1": {"value1": 1}, "section2": {"value2": 2}}
184+
assert config.option.section1() == {"value1": 1}
185+
assert config.option.section1.value1() == 1
186+
assert config.option.section2() == {"value2": 2}
187+
assert config.option.section2.value2() == 2
186188

187189

188190
@mark.usefixtures("no_pydantic_module_installed")

0 commit comments

Comments
 (0)