Skip to content

Commit 06f9855

Browse files
authored
Update types and add tests (ets-labs#480)
1 parent 547b7fd commit 06f9855

File tree

3 files changed

+83
-61
lines changed

3 files changed

+83
-61
lines changed

src/dependency_injector/containers.c

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

src/dependency_injector/containers.pyx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,14 @@ class DynamicContainer(Container):
103103

104104
return copied
105105

106-
def __setattr__(self, str name, object value):
106+
def __setattr__(self, name, value):
107107
"""Set instance attribute.
108108
109109
If value of attribute is provider, it will be added into providers
110110
dictionary.
111111
112112
:param name: Attribute's name
113-
:type name: str
113+
:type name: object
114114
115115
:param value: Attribute's value
116116
:type value: object
@@ -129,14 +129,14 @@ class DynamicContainer(Container):
129129

130130
super(DynamicContainer, self).__setattr__(name, value)
131131

132-
def __delattr__(self, str name):
132+
def __delattr__(self, name):
133133
"""Delete instance attribute.
134134
135135
If value of attribute is provider, it will be deleted from providers
136136
dictionary.
137137
138138
:param name: Attribute's name
139-
:type name: str
139+
:type name: object
140140
141141
:rtype: None
142142
"""
@@ -169,7 +169,7 @@ class DynamicContainer(Container):
169169
170170
:param providers: Dictionary of providers
171171
:type providers:
172-
dict[str, :py:class:`dependency_injector.providers.Provider`]
172+
dict[object, :py:class:`dependency_injector.providers.Provider`]
173173
174174
:rtype: None
175175
"""

tests/unit/containers/test_dynamic_py2_py3.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,3 +686,36 @@ class Container(containers.DeclarativeContainer):
686686

687687
self.assertIs(container.__self__(), container)
688688
self.assertIs(container.sub_container().__self__(), container.sub_container())
689+
690+
691+
class DynamicContainerWithCustomStringTests(unittest.TestCase):
692+
# See: https://github.com/ets-labs/python-dependency-injector/issues/479
693+
694+
class CustomString(str):
695+
pass
696+
697+
class CustomClass:
698+
thing = None
699+
700+
def setUp(self):
701+
self.object = self.CustomClass()
702+
self.container = containers.DynamicContainer()
703+
self.provider = providers.Provider()
704+
705+
def test_setattr(self):
706+
setattr(self.container, self.CustomString('test_attr'), self.provider)
707+
self.assertIs(self.container.test_attr, self.provider)
708+
709+
def test_delattr(self):
710+
setattr(self.container, self.CustomString('test_attr'), self.provider)
711+
delattr(self.container, self.CustomString('test_attr'))
712+
with self.assertRaises(AttributeError):
713+
self.container.test_attr
714+
715+
def test_set_provider(self):
716+
self.container.set_provider(self.CustomString('test_attr'), self.provider)
717+
self.assertIs(self.container.test_attr, self.provider)
718+
719+
def test_set_providers(self):
720+
self.container.set_providers(**{self.CustomString('test_attr'): self.provider})
721+
self.assertIs(self.container.test_attr, self.provider)

0 commit comments

Comments
 (0)