diff --git a/src/dependency_injector/providers.pyx b/src/dependency_injector/providers.pyx index 4d4d5c39..edde7b1b 100644 --- a/src/dependency_injector/providers.pyx +++ b/src/dependency_injector/providers.pyx @@ -157,10 +157,7 @@ cdef dict pydantic_settings_to_dict(settings, dict kwargs): ) if isinstance(settings, type) and issubclass(settings, PydanticSettings): - raise Error( - "Got settings class, but expect instance: " - "instead \"{0}\" use \"{0}()\"".format(settings.__name__) - ) + settings = settings() if not isinstance(settings, PydanticSettings): raise Error( diff --git a/tests/unit/providers/configuration/test_from_pydantic_py36.py b/tests/unit/providers/configuration/test_from_pydantic_py36.py index ee2a1176..f47e458c 100644 --- a/tests/unit/providers/configuration/test_from_pydantic_py36.py +++ b/tests/unit/providers/configuration/test_from_pydantic_py36.py @@ -168,21 +168,23 @@ def test_option_not_instance_of_settings(config): def test_subclass_instead_of_instance(config): - with raises(errors.Error) as error: - config.from_pydantic(Settings1) - assert error.value.args[0] == ( - "Got settings class, but expect instance: " - "instead \"Settings1\" use \"Settings1()\"" - ) + config.from_pydantic(Settings1) + + assert config() == {"section1": {"value1": 1}, "section2": {"value2": 2}} + assert config.section1() == {"value1": 1} + assert config.section1.value1() == 1 + assert config.section2() == {"value2": 2} + assert config.section2.value2() == 2 def test_option_subclass_instead_of_instance(config): - with raises(errors.Error) as error: - config.option.from_pydantic(Settings1) - assert error.value.args[0] == ( - "Got settings class, but expect instance: " - "instead \"Settings1\" use \"Settings1()\"" - ) + config.option.from_pydantic(Settings1) + + assert config.option() == {"section1": {"value1": 1}, "section2": {"value2": 2}} + assert config.option.section1() == {"value1": 1} + assert config.option.section1.value1() == 1 + assert config.option.section2() == {"value2": 2} + assert config.option.section2.value2() == 2 @mark.usefixtures("no_pydantic_module_installed")