Fix issue + refactoring

This commit is contained in:
Roman Mogylatov 2019-10-09 10:33:32 -04:00
parent 824484f82e
commit 07268ef26f
4 changed files with 3244 additions and 2583 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -21,8 +21,10 @@ cdef class Object(Provider):
cpdef object _provide(self, tuple args, dict kwargs) cpdef object _provide(self, tuple args, dict kwargs)
cdef class Delegate(Object): cdef class Delegate(Provider):
pass cdef object __provides
cpdef object _provide(self, tuple args, dict kwargs)
cdef class Dependency(Provider): cdef class Dependency(Provider):

View File

@ -291,7 +291,7 @@ cdef class Object(Provider):
return self.__provides return self.__provides
cdef class Delegate(Object): cdef class Delegate(Provider):
"""Delegate provider returns provider "as is". """Delegate provider returns provider "as is".
.. py:attribute:: provides .. py:attribute:: provides
@ -305,9 +305,49 @@ cdef class Delegate(Object):
"""Initializer. """Initializer.
:param provides: Value that have to be provided. :param provides: Value that have to be provided.
:type provides: object :type provides: :py:class:`Provider`
""" """
super(Delegate, self).__init__(ensure_is_provider(provides)) self.__provides = ensure_is_provider(provides)
super(Delegate, self).__init__()
def __deepcopy__(self, memo):
"""Create and return full copy of provider."""
copied = memo.get(id(self))
if copied is not None:
return copied
copied = self.__class__(deepcopy(self.__provides, memo))
self._copy_overridings(copied, memo)
return copied
def __str__(self):
"""Return string representation of provider.
:rtype: str
"""
return represent_provider(provider=self, provides=self.__provides)
def __repr__(self):
"""Return string representation of provider.
:rtype: str
"""
return self.__str__()
cpdef object _provide(self, tuple args, dict kwargs):
"""Return provided instance.
:param args: Tuple of context positional arguments.
:type args: tuple[object]
:param kwargs: Dictionary of context keyword arguments.
:type kwargs: dict[str, object]
:rtype: object
"""
return self.__provides
cdef class Dependency(Provider): cdef class Dependency(Provider):
@ -834,7 +874,7 @@ cdef class CallableDelegate(Delegate):
if isinstance(callable, Callable) is False: if isinstance(callable, Callable) is False:
raise Error('{0} can wrap only {1} providers'.format( raise Error('{0} can wrap only {1} providers'.format(
self.__class__, Callable)) self.__class__, Callable))
super(Delegate, self).__init__(callable) super(CallableDelegate, self).__init__(callable)
cdef class Coroutine(Callable): cdef class Coroutine(Callable):
@ -1416,7 +1456,7 @@ cdef class FactoryDelegate(Delegate):
if isinstance(factory, Factory) is False: if isinstance(factory, Factory) is False:
raise Error('{0} can wrap only {1} providers'.format( raise Error('{0} can wrap only {1} providers'.format(
self.__class__, Factory)) self.__class__, Factory))
super(Delegate, self).__init__(factory) super(FactoryDelegate, self).__init__(factory)
cdef class FactoryAggregate(Provider): cdef class FactoryAggregate(Provider):
@ -1923,7 +1963,7 @@ cdef class SingletonDelegate(Delegate):
if isinstance(singleton, BaseSingleton) is False: if isinstance(singleton, BaseSingleton) is False:
raise Error('{0} can wrap only {1} providers'.format( raise Error('{0} can wrap only {1} providers'.format(
self.__class__, BaseSingleton)) self.__class__, BaseSingleton))
super(Delegate, self).__init__(singleton) super(SingletonDelegate, self).__init__(singleton)
cdef class Injection(object): cdef class Injection(object):