mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-11 00:50:50 +03:00
Add sketch
This commit is contained in:
parent
50a9dda192
commit
68eed5db33
File diff suppressed because it is too large
Load Diff
|
@ -324,6 +324,10 @@ cdef class Object(Provider):
|
|||
"""
|
||||
return self.__str__()
|
||||
|
||||
@property
|
||||
def provided(self):
|
||||
return ProvidedAttributes(self)
|
||||
|
||||
cpdef object _provide(self, tuple args, dict kwargs):
|
||||
"""Return provided instance.
|
||||
|
||||
|
@ -769,6 +773,10 @@ cdef class Callable(Provider):
|
|||
"""Return wrapped callable."""
|
||||
return self.__provides
|
||||
|
||||
@property
|
||||
def provided(self):
|
||||
return ProvidedAttributes(self)
|
||||
|
||||
@property
|
||||
def args(self):
|
||||
"""Return positional argument injections."""
|
||||
|
@ -1599,6 +1607,10 @@ cdef class Factory(Provider):
|
|||
"""Return provided type."""
|
||||
return self.__instantiator.provides
|
||||
|
||||
@property
|
||||
def provided(self):
|
||||
return ProvidedAttributes(self)
|
||||
|
||||
@property
|
||||
def args(self):
|
||||
"""Return positional argument injections."""
|
||||
|
@ -1932,6 +1944,10 @@ cdef class BaseSingleton(Provider):
|
|||
"""Return provided type."""
|
||||
return self.__instantiator.cls
|
||||
|
||||
@property
|
||||
def provided(self):
|
||||
return ProvidedAttributes(self)
|
||||
|
||||
@property
|
||||
def args(self):
|
||||
"""Return positional argument injections."""
|
||||
|
@ -2360,6 +2376,10 @@ cdef class List(Provider):
|
|||
"""
|
||||
return represent_provider(provider=self, provides=list(self.args))
|
||||
|
||||
@property
|
||||
def provided(self):
|
||||
return ProvidedAttributes(self)
|
||||
|
||||
@property
|
||||
def args(self):
|
||||
"""Return positional argument injections."""
|
||||
|
@ -2537,6 +2557,10 @@ cdef class Selector(Provider):
|
|||
address=hex(id(self)),
|
||||
)
|
||||
|
||||
@property
|
||||
def provided(self):
|
||||
return ProvidedAttributes(self)
|
||||
|
||||
@property
|
||||
def providers(self):
|
||||
"""Return providers."""
|
||||
|
@ -2555,6 +2579,118 @@ cdef class Selector(Provider):
|
|||
return self.__providers[selector_value](*args, **kwargs)
|
||||
|
||||
|
||||
class ProvidedAttributes(Provider):
|
||||
|
||||
def __init__(self, provider):
|
||||
self._provider = provider
|
||||
super().__init__()
|
||||
|
||||
def __repr__(self):
|
||||
return f'ProvidedAttributes({self._provider})'
|
||||
|
||||
def __deepcopy__(self, memo=None):
|
||||
return self.__class__(deepcopy(self._provider, memo))
|
||||
|
||||
def __getattr__(self, item):
|
||||
return AttributeGetter(self, item)
|
||||
|
||||
def __getitem__(self, item):
|
||||
return ItemGetter(self, item)
|
||||
|
||||
def call(self, *args, **kwargs):
|
||||
return MethodCaller(self, *args, **kwargs)
|
||||
|
||||
def _provide(self, args, kwargs):
|
||||
return self._provider(*args, **kwargs)
|
||||
|
||||
|
||||
class AttributeGetter(Provider):
|
||||
|
||||
def __init__(self, provider, attribute):
|
||||
self._provider = provider
|
||||
self._attribute = attribute
|
||||
super().__init__()
|
||||
|
||||
def __repr__(self):
|
||||
return f'AttributeGetter({self._attribute})'
|
||||
|
||||
def __deepcopy__(self, memo=None):
|
||||
return self.__class__(deepcopy(self._provider, memo), self._attribute)
|
||||
|
||||
def __getattr__(self, item):
|
||||
return AttributeGetter(self, item)
|
||||
|
||||
def __getitem__(self, item):
|
||||
return ItemGetter(self, item)
|
||||
|
||||
def call(self, *args, **kwargs):
|
||||
return MethodCaller(self, *args, **kwargs)
|
||||
|
||||
def _provide(self, args, kwargs):
|
||||
provided = self._provider(*args, **kwargs)
|
||||
return getattr(provided, self._attribute)
|
||||
|
||||
|
||||
class ItemGetter(Provider):
|
||||
|
||||
def __init__(self, provider, item):
|
||||
self._provider = provider
|
||||
self._item = item
|
||||
super().__init__()
|
||||
|
||||
def __repr__(self):
|
||||
return f'ItemGetter({self._item})'
|
||||
|
||||
def __deepcopy__(self, memo=None):
|
||||
return self.__class__(deepcopy(self._provider, memo), self._item)
|
||||
|
||||
def __getattr__(self, item):
|
||||
return AttributeGetter(self, item)
|
||||
|
||||
def __getitem__(self, item):
|
||||
return ItemGetter(self, item)
|
||||
|
||||
def call(self, *args, **kwargs):
|
||||
return MethodCaller(self, *args, **kwargs)
|
||||
|
||||
def _provide(self, args, kwargs):
|
||||
provided = self._provider(*args, **kwargs)
|
||||
return provided[self._item]
|
||||
|
||||
|
||||
class MethodCaller(Provider):
|
||||
|
||||
def __init__(self, provider, *args, **kwargs):
|
||||
self._provider = provider
|
||||
self._args = args
|
||||
self._kwargs = kwargs
|
||||
super().__init__()
|
||||
|
||||
def __repr__(self):
|
||||
return f'MethodCaller({self._provider})'
|
||||
|
||||
def __deepcopy__(self, memo=None):
|
||||
return self.__class__(
|
||||
deepcopy(self._provider, memo),
|
||||
*deepcopy(self._args, memo),
|
||||
**deepcopy(self._kwargs, memo),
|
||||
)
|
||||
|
||||
def __getattr__(self, item):
|
||||
return AttributeGetter(self, item)
|
||||
|
||||
def __getitem__(self, item):
|
||||
return ItemGetter(self, item)
|
||||
|
||||
def call(self, *args, **kwargs):
|
||||
return MethodCaller(self, *args, **kwargs)
|
||||
|
||||
def _provide(self, args, kwargs):
|
||||
provided = self._provider(*args, **kwargs)
|
||||
# TODO: add proper handling of injections
|
||||
return provided(*self._args, **self._kwargs)
|
||||
|
||||
|
||||
cdef class Injection(object):
|
||||
"""Abstract injection class."""
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user