mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 01:47:36 +03:00 
			
		
		
		
	Implement fix
This commit is contained in:
		
							parent
							
								
									f961ff536a
								
							
						
					
					
						commit
						a94b141a8f
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -14,6 +14,7 @@ cimport cython
 | 
			
		|||
cdef class Provider(object):
 | 
			
		||||
    cdef tuple __overridden
 | 
			
		||||
    cdef Provider __last_overriding
 | 
			
		||||
    cdef tuple __overrides
 | 
			
		||||
    cdef int __async_mode
 | 
			
		||||
 | 
			
		||||
    cpdef object _provide(self, tuple args, dict kwargs)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,6 +61,10 @@ class Provider(Generic[T]):
 | 
			
		|||
    def override(self, provider: Union[Provider, Any]) -> OverridingContext[P]: ...
 | 
			
		||||
    def reset_last_overriding(self) -> None: ...
 | 
			
		||||
    def reset_override(self) -> None: ...
 | 
			
		||||
    @property
 | 
			
		||||
    def overrides(self) -> Tuple[Provider]: ...
 | 
			
		||||
    def register_overrides(self, provider: Union[Provider, Any]) -> None: ...
 | 
			
		||||
    def unregister_overrides(self, provider: Union[Provider, Any]) -> None: ...
 | 
			
		||||
    def delegate(self) -> Provider: ...
 | 
			
		||||
    @property
 | 
			
		||||
    def provider(self) -> Provider: ...
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -176,6 +176,7 @@ cdef class Provider(object):
 | 
			
		|||
        """Initializer."""
 | 
			
		||||
        self.__overridden = tuple()
 | 
			
		||||
        self.__last_overriding = None
 | 
			
		||||
        self.__overrides = tuple()
 | 
			
		||||
        self.__async_mode = ASYNC_MODE_UNDEFINED
 | 
			
		||||
        super(Provider, self).__init__()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -267,6 +268,7 @@ cdef class Provider(object):
 | 
			
		|||
        with self.overriding_lock:
 | 
			
		||||
            self.__overridden += (provider,)
 | 
			
		||||
            self.__last_overriding = provider
 | 
			
		||||
            provider.register_overrides(self)
 | 
			
		||||
 | 
			
		||||
        return OverridingContext(self, provider)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -282,6 +284,8 @@ cdef class Provider(object):
 | 
			
		|||
            if len(self.__overridden) == 0:
 | 
			
		||||
                raise Error('Provider {0} is not overridden'.format(str(self)))
 | 
			
		||||
 | 
			
		||||
            self.__last_overriding.unregister_overrides(self)
 | 
			
		||||
 | 
			
		||||
            self.__overridden = self.__overridden[:-1]
 | 
			
		||||
            try:
 | 
			
		||||
                self.__last_overriding = self.__overridden[-1]
 | 
			
		||||
| 
						 | 
				
			
			@ -294,9 +298,27 @@ cdef class Provider(object):
 | 
			
		|||
        :rtype: None
 | 
			
		||||
        """
 | 
			
		||||
        with self.overriding_lock:
 | 
			
		||||
            for provider in self.__overridden:
 | 
			
		||||
                provider.unregister_overrides(self)
 | 
			
		||||
            self.__overridden = tuple()
 | 
			
		||||
            self.__last_overriding = None
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def overrides(self):
 | 
			
		||||
        """Return providers that are overridden by the current provider."""
 | 
			
		||||
        return self.__overrides
 | 
			
		||||
 | 
			
		||||
    def register_overrides(self, provider):
 | 
			
		||||
        """Register provider that overrides current provider."""
 | 
			
		||||
        self.__overrides =  tuple(set(self.__overrides + (provider,)))
 | 
			
		||||
 | 
			
		||||
    def unregister_overrides(self, provider):
 | 
			
		||||
        """Unregister provider that overrides current provider."""
 | 
			
		||||
        overrides = set(self.__overrides)
 | 
			
		||||
        if provider in overrides:
 | 
			
		||||
            overrides.remove(provider)
 | 
			
		||||
        self.__overrides = tuple(overrides)
 | 
			
		||||
 | 
			
		||||
    def async_(self, *args, **kwargs):
 | 
			
		||||
        """Return provided object asynchronously.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -388,6 +410,7 @@ cdef class Provider(object):
 | 
			
		|||
        """Copy provider overridings to a newly copied provider."""
 | 
			
		||||
        copied.__overridden = deepcopy(self.__overridden, memo)
 | 
			
		||||
        copied.__last_overriding = deepcopy(self.__last_overriding, memo)
 | 
			
		||||
        copied.__overrides = deepcopy(self.__overrides, memo)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
cdef class Object(Provider):
 | 
			
		||||
| 
						 | 
				
			
			@ -1893,8 +1916,12 @@ cdef class Configuration(Object):
 | 
			
		|||
 | 
			
		||||
        :rtype: None
 | 
			
		||||
        """
 | 
			
		||||
        for child in self.__children.values():
 | 
			
		||||
            child.reset_cache()
 | 
			
		||||
        for provider in self.__children.values():
 | 
			
		||||
            provider.reset_cache()
 | 
			
		||||
 | 
			
		||||
        for provider in self.overrides:
 | 
			
		||||
            if isinstance(provider, (Configuration, ConfigurationOption)):
 | 
			
		||||
                provider.reset_cache()
 | 
			
		||||
 | 
			
		||||
    def update(self, value):
 | 
			
		||||
        """Set configuration options.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user