Skip to content

Commit 38ca1cd

Browse files
committed
Fix #550
1 parent 8dc3dd2 commit 38ca1cd

File tree

4 files changed

+34
-13
lines changed

4 files changed

+34
-13
lines changed

docs/main/changelog.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ Development version
2121
``FactoryAggregate.factories`` attribute.
2222
- Add ``.set_providers()`` method to the ``FactoryAggregate`` provider. It is an alias for
2323
``FactoryAggregate.set_factories()`` method.
24+
- Fix ``Dependency`` provider to don't raise "Dependency is not defined" error when the ``default``
25+
is a falsy value of proper type.
26+
See issue `#550 <https://github.com/ets-labs/python-dependency-injector/issues/550>`_. Thanks to
27+
`@approxit <https://github.com/approxit>`_ for reporting the issue.
2428
- Refactor ``FactoryAggregate`` provider internals.
2529
- Update logo on Github and in docs to support dark themes and remove some imperfections.
2630

src/dependency_injector/providers.c

Lines changed: 13 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/dependency_injector/providers.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -879,7 +879,7 @@ cdef class Dependency(Provider):
879879

880880
def set_default(self, default):
881881
"""Set type."""
882-
if default and not isinstance(default, Provider):
882+
if default is not None and not isinstance(default, Provider):
883883
default = Object(default)
884884
self.__default = default
885885
return self

tests/unit/providers/test_dependency_py2_py3.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,22 @@ def test_default_attribute_provider():
7777
assert provider.default is default
7878

7979

80+
def test_default_with_empty_dict():
81+
# See: https://github.com/ets-labs/python-dependency-injector/issues/550
82+
default = {}
83+
provider = providers.Dependency(instance_of=dict, default=default)
84+
assert provider() == default
85+
assert provider.default() == default
86+
87+
88+
def test_default_with_empty_string():
89+
# See: https://github.com/ets-labs/python-dependency-injector/issues/550
90+
default = ""
91+
provider = providers.Dependency(instance_of=str, default=default)
92+
assert provider() == default
93+
assert provider.default() == default
94+
95+
8096
def test_is_defined(provider):
8197
assert provider.is_defined is False
8298

0 commit comments

Comments
 (0)