mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 09:57:37 +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