mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 09:57:37 +03:00 
			
		
		
		
	Refactoring of kwargs injecting
This commit is contained in:
		
							parent
							
								
									0364128ba5
								
							
						
					
					
						commit
						5561069d50
					
				| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
from six import wraps
 | 
			
		||||
 | 
			
		||||
from .utils import ensure_is_injection
 | 
			
		||||
from .utils import get_injectable_kwargs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def override(catalog):
 | 
			
		||||
| 
						 | 
				
			
			@ -30,10 +31,10 @@ def inject(injection):
 | 
			
		|||
        @wraps(callback)
 | 
			
		||||
        def decorated(*args, **kwargs):
 | 
			
		||||
            """Decorated with dependency injection callback."""
 | 
			
		||||
            for injection in getattr(decorated, '_injections'):
 | 
			
		||||
                if injection.name not in kwargs:
 | 
			
		||||
                    kwargs[injection.name] = injection.value
 | 
			
		||||
            return callback(*args, **kwargs)
 | 
			
		||||
            return callback(*args,
 | 
			
		||||
                            **get_injectable_kwargs(kwargs,
 | 
			
		||||
                                                    getattr(decorated,
 | 
			
		||||
                                                            '_injections')))
 | 
			
		||||
 | 
			
		||||
        setattr(decorated, '_injections', (injection,))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ from .utils import ensure_is_provider
 | 
			
		|||
from .utils import is_kwarg_injection
 | 
			
		||||
from .utils import is_attribute_injection
 | 
			
		||||
from .utils import is_method_injection
 | 
			
		||||
from .utils import get_injectable_kwargs
 | 
			
		||||
 | 
			
		||||
from .errors import Error
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -118,12 +119,9 @@ class Factory(Provider):
 | 
			
		|||
 | 
			
		||||
    def _provide(self, *args, **kwargs):
 | 
			
		||||
        """Return provided instance."""
 | 
			
		||||
        init_kwargs = dict(((injection.name, injection.value)
 | 
			
		||||
                            for injection in self._kwargs))
 | 
			
		||||
        init_kwargs.update(kwargs)
 | 
			
		||||
 | 
			
		||||
        instance = self._provides(*args, **init_kwargs)
 | 
			
		||||
 | 
			
		||||
        instance = self._provides(*args,
 | 
			
		||||
                                  **get_injectable_kwargs(kwargs,
 | 
			
		||||
                                                          self._kwargs))
 | 
			
		||||
        for attribute in self._attributes:
 | 
			
		||||
            setattr(instance, attribute.name, attribute.value)
 | 
			
		||||
        for method in self._methods:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,3 +49,11 @@ def is_method_injection(instance):
 | 
			
		|||
    """Check if instance is method injection instance."""
 | 
			
		||||
    return (not isinstance(instance, class_types) and
 | 
			
		||||
            getattr(instance, '__IS_METHOD_INJECTION__', False) is True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_injectable_kwargs(kwargs, injections):
 | 
			
		||||
    """Return dictionary of kwargs, patched with injections."""
 | 
			
		||||
    init_kwargs = dict(((injection.name, injection.value)
 | 
			
		||||
                        for injection in injections))
 | 
			
		||||
    init_kwargs.update(kwargs)
 | 
			
		||||
    return init_kwargs
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user