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