mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 01:47:36 +03:00 
			
		
		
		
	Implement lazy initialization and improve copying for Object provider
This commit is contained in:
		
							parent
							
								
									3e03b9315e
								
							
						
					
					
						commit
						aa9fbb3b3d
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
					@ -79,7 +79,9 @@ class Provider(Generic[T]):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Object(Provider[T]):
 | 
					class Object(Provider[T]):
 | 
				
			||||||
    def __init__(self, provides: T) -> None: ...
 | 
					    def __init__(self, provides: Optional[T] = None) -> None: ...
 | 
				
			||||||
 | 
					    def provides(self) -> Optional[T]: ...
 | 
				
			||||||
 | 
					    def set_provides(self, provides: Optional[T]) -> Object: ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Self(Provider[T]):
 | 
					class Self(Provider[T]):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -400,13 +400,10 @@ cdef class Object(Provider):
 | 
				
			||||||
        :type: object
 | 
					        :type: object
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, provides):
 | 
					    def __init__(self, provides=None):
 | 
				
			||||||
        """Initializer.
 | 
					        """Initialize provider."""
 | 
				
			||||||
 | 
					        self.__provides = None
 | 
				
			||||||
        :param provides: Value that have to be provided.
 | 
					        self.set_provides(provides)
 | 
				
			||||||
        :type provides: object
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        self.__provides = provides
 | 
					 | 
				
			||||||
        super(Object, self).__init__()
 | 
					        super(Object, self).__init__()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __deepcopy__(self, memo):
 | 
					    def __deepcopy__(self, memo):
 | 
				
			||||||
| 
						 | 
					@ -415,7 +412,8 @@ cdef class Object(Provider):
 | 
				
			||||||
        if copied is not None:
 | 
					        if copied is not None:
 | 
				
			||||||
            return copied
 | 
					            return copied
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        copied = self.__class__(self.__provides)
 | 
					        copied = _memorized_duplicate(self, memo)
 | 
				
			||||||
 | 
					        copied.set_provides(self.provides)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._copy_overridings(copied, memo)
 | 
					        self._copy_overridings(copied, memo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -435,6 +433,16 @@ cdef class Object(Provider):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        return self.__str__()
 | 
					        return self.__str__()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def provides(self):
 | 
				
			||||||
 | 
					        """Return provider's provides."""
 | 
				
			||||||
 | 
					        return self.__provides
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def set_provides(self, provides):
 | 
				
			||||||
 | 
					        """Set provider's provides."""
 | 
				
			||||||
 | 
					        self.__provides = provides
 | 
				
			||||||
 | 
					        return self
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def related(self):
 | 
					    def related(self):
 | 
				
			||||||
        """Return related providers generator."""
 | 
					        """Return related providers generator."""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -152,6 +152,17 @@ class ObjectProviderTests(unittest.TestCase):
 | 
				
			||||||
    def test_is_provider(self):
 | 
					    def test_is_provider(self):
 | 
				
			||||||
        self.assertTrue(providers.is_provider(providers.Object(object())))
 | 
					        self.assertTrue(providers.is_provider(providers.Object(object())))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_init_optional_provides(self):
 | 
				
			||||||
 | 
					        instance = object()
 | 
				
			||||||
 | 
					        provider = providers.Object()
 | 
				
			||||||
 | 
					        provider.set_provides(instance)
 | 
				
			||||||
 | 
					        self.assertIs(provider.provides, instance)
 | 
				
			||||||
 | 
					        self.assertIs(provider(), instance)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_set_provides_returns_self(self):
 | 
				
			||||||
 | 
					        provider = providers.Object()
 | 
				
			||||||
 | 
					        self.assertIs(provider.set_provides(object()), provider)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_provided_instance_provider(self):
 | 
					    def test_provided_instance_provider(self):
 | 
				
			||||||
        provider = providers.Object(object())
 | 
					        provider = providers.Object(object())
 | 
				
			||||||
        self.assertIsInstance(provider.provided, providers.ProvidedInstance)
 | 
					        self.assertIsInstance(provider.provided, providers.ProvidedInstance)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user