mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-07-04 12:23:14 +03:00
Implement traversal for all providers
This commit is contained in:
parent
90c6759975
commit
0d4b9574e6
File diff suppressed because it is too large
Load Diff
|
@ -1484,7 +1484,9 @@ cdef class ConfigurationOption(Provider):
|
||||||
@property
|
@property
|
||||||
def providers_traversal(self):
|
def providers_traversal(self):
|
||||||
"""Return providers traversal generator."""
|
"""Return providers traversal generator."""
|
||||||
# TODO: revise
|
yield from filter(is_provider, self.__name)
|
||||||
|
yield from [self.__root]
|
||||||
|
yield from self.__children.values()
|
||||||
yield from super().providers_traversal
|
yield from super().providers_traversal
|
||||||
|
|
||||||
def _is_strict_mode_enabled(self):
|
def _is_strict_mode_enabled(self):
|
||||||
|
@ -1808,6 +1810,12 @@ cdef class Configuration(Object):
|
||||||
|
|
||||||
self.override(value)
|
self.override(value)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield from self.__children.values()
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
def _is_strict_mode_enabled(self):
|
def _is_strict_mode_enabled(self):
|
||||||
return self.__strict
|
return self.__strict
|
||||||
|
|
||||||
|
@ -2195,6 +2203,12 @@ cdef class FactoryAggregate(Provider):
|
||||||
raise Error(
|
raise Error(
|
||||||
'{0} providers could not be overridden'.format(self.__class__))
|
'{0} providers could not be overridden'.format(self.__class__))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield from self.__factories.values()
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
try:
|
try:
|
||||||
factory_name = args[0]
|
factory_name = args[0]
|
||||||
|
@ -2368,6 +2382,12 @@ cdef class BaseSingleton(Provider):
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield self.__instantiator
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
def _async_init_instance(self, future_result, result):
|
def _async_init_instance(self, future_result, result):
|
||||||
try:
|
try:
|
||||||
instance = result.result()
|
instance = result.result()
|
||||||
|
@ -2795,6 +2815,12 @@ cdef class List(Provider):
|
||||||
self.__args_len = len(self.__args)
|
self.__args_len = len(self.__args)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield from filter(is_provider, self.args)
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
"""Return result of provided callable's call."""
|
"""Return result of provided callable's call."""
|
||||||
return list(__provide_positional_args(args, self.__args, self.__args_len))
|
return list(__provide_positional_args(args, self.__args, self.__args_len))
|
||||||
|
@ -2907,6 +2933,12 @@ cdef class Dict(Provider):
|
||||||
self.__kwargs_len = len(self.__kwargs)
|
self.__kwargs_len = len(self.__kwargs)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield from filter(is_provider, self.kwargs.values())
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
"""Return result of provided callable's call."""
|
"""Return result of provided callable's call."""
|
||||||
return __provide_keyword_args(kwargs, self.__kwargs, self.__kwargs_len)
|
return __provide_keyword_args(kwargs, self.__kwargs, self.__kwargs_len)
|
||||||
|
@ -3075,6 +3107,14 @@ cdef class Resource(Provider):
|
||||||
result.set_result(None)
|
result.set_result(None)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield from filter(is_provider, [self.__initializer])
|
||||||
|
yield from filter(is_provider, self.args)
|
||||||
|
yield from filter(is_provider, self.kwargs.values())
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
if self.__initialized:
|
if self.__initialized:
|
||||||
return self.__resource
|
return self.__resource
|
||||||
|
@ -3300,6 +3340,12 @@ cdef class Container(Provider):
|
||||||
declarative container initialization."""
|
declarative container initialization."""
|
||||||
self.__container.override_providers(**self.__overriding_providers)
|
self.__container.override_providers(**self.__overriding_providers)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield from self.providers.values()
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
"""Return single instance."""
|
"""Return single instance."""
|
||||||
return self.__container
|
return self.__container
|
||||||
|
@ -3389,6 +3435,13 @@ cdef class Selector(Provider):
|
||||||
"""Return providers."""
|
"""Return providers."""
|
||||||
return dict(self.__providers)
|
return dict(self.__providers)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield from filter(is_provider, [self.__selector])
|
||||||
|
yield from self.providers.values()
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
"""Return single instance."""
|
"""Return single instance."""
|
||||||
selector_value = self.__selector()
|
selector_value = self.__selector()
|
||||||
|
@ -3465,6 +3518,12 @@ cdef class ProvidedInstance(Provider):
|
||||||
def call(self, *args, **kwargs):
|
def call(self, *args, **kwargs):
|
||||||
return MethodCaller(self, *args, **kwargs)
|
return MethodCaller(self, *args, **kwargs)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield self.__provider
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
return self.__provider(*args, **kwargs)
|
return self.__provider(*args, **kwargs)
|
||||||
|
|
||||||
|
@ -3514,6 +3573,12 @@ cdef class AttributeGetter(Provider):
|
||||||
def call(self, *args, **kwargs):
|
def call(self, *args, **kwargs):
|
||||||
return MethodCaller(self, *args, **kwargs)
|
return MethodCaller(self, *args, **kwargs)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield self.__provider
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
provided = self.__provider(*args, **kwargs)
|
provided = self.__provider(*args, **kwargs)
|
||||||
if __isawaitable(provided):
|
if __isawaitable(provided):
|
||||||
|
@ -3574,6 +3639,12 @@ cdef class ItemGetter(Provider):
|
||||||
def call(self, *args, **kwargs):
|
def call(self, *args, **kwargs):
|
||||||
return MethodCaller(self, *args, **kwargs)
|
return MethodCaller(self, *args, **kwargs)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield self.__provider
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
provided = self.__provider(*args, **kwargs)
|
provided = self.__provider(*args, **kwargs)
|
||||||
if __isawaitable(provided):
|
if __isawaitable(provided):
|
||||||
|
@ -3666,6 +3737,14 @@ cdef class MethodCaller(Provider):
|
||||||
def call(self, *args, **kwargs):
|
def call(self, *args, **kwargs):
|
||||||
return MethodCaller(self, *args, **kwargs)
|
return MethodCaller(self, *args, **kwargs)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def providers_traversal(self):
|
||||||
|
"""Return providers traversal generator."""
|
||||||
|
yield self.__provider
|
||||||
|
yield from filter(is_provider, self.args)
|
||||||
|
yield from filter(is_provider, self.kwargs.values())
|
||||||
|
yield from super().providers_traversal
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
call = self.__provider()
|
call = self.__provider()
|
||||||
if __isawaitable(call):
|
if __isawaitable(call):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user