mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-11 09:00:57 +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__()
|
return self.__str__()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def provided(self):
|
||||||
|
return ProvidedAttributes(self)
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
"""Return provided instance.
|
"""Return provided instance.
|
||||||
|
|
||||||
|
@ -769,6 +773,10 @@ cdef class Callable(Provider):
|
||||||
"""Return wrapped callable."""
|
"""Return wrapped callable."""
|
||||||
return self.__provides
|
return self.__provides
|
||||||
|
|
||||||
|
@property
|
||||||
|
def provided(self):
|
||||||
|
return ProvidedAttributes(self)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self):
|
def args(self):
|
||||||
"""Return positional argument injections."""
|
"""Return positional argument injections."""
|
||||||
|
@ -1599,6 +1607,10 @@ cdef class Factory(Provider):
|
||||||
"""Return provided type."""
|
"""Return provided type."""
|
||||||
return self.__instantiator.provides
|
return self.__instantiator.provides
|
||||||
|
|
||||||
|
@property
|
||||||
|
def provided(self):
|
||||||
|
return ProvidedAttributes(self)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self):
|
def args(self):
|
||||||
"""Return positional argument injections."""
|
"""Return positional argument injections."""
|
||||||
|
@ -1932,6 +1944,10 @@ cdef class BaseSingleton(Provider):
|
||||||
"""Return provided type."""
|
"""Return provided type."""
|
||||||
return self.__instantiator.cls
|
return self.__instantiator.cls
|
||||||
|
|
||||||
|
@property
|
||||||
|
def provided(self):
|
||||||
|
return ProvidedAttributes(self)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self):
|
def args(self):
|
||||||
"""Return positional argument injections."""
|
"""Return positional argument injections."""
|
||||||
|
@ -2360,6 +2376,10 @@ cdef class List(Provider):
|
||||||
"""
|
"""
|
||||||
return represent_provider(provider=self, provides=list(self.args))
|
return represent_provider(provider=self, provides=list(self.args))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def provided(self):
|
||||||
|
return ProvidedAttributes(self)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self):
|
def args(self):
|
||||||
"""Return positional argument injections."""
|
"""Return positional argument injections."""
|
||||||
|
@ -2537,6 +2557,10 @@ cdef class Selector(Provider):
|
||||||
address=hex(id(self)),
|
address=hex(id(self)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def provided(self):
|
||||||
|
return ProvidedAttributes(self)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def providers(self):
|
def providers(self):
|
||||||
"""Return providers."""
|
"""Return providers."""
|
||||||
|
@ -2555,6 +2579,118 @@ cdef class Selector(Provider):
|
||||||
return self.__providers[selector_value](*args, **kwargs)
|
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):
|
cdef class Injection(object):
|
||||||
"""Abstract injection class."""
|
"""Abstract injection class."""
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user