mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 09:57:37 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""`Factory` providers delegation example."""
 | 
						|
 | 
						|
import collections
 | 
						|
 | 
						|
import dependency_injector.providers as providers
 | 
						|
 | 
						|
 | 
						|
Photo = collections.namedtuple('Photo', [])
 | 
						|
 | 
						|
 | 
						|
class User:
 | 
						|
    """Example user model."""
 | 
						|
 | 
						|
    def __init__(self, photos_factory):
 | 
						|
        """Initialize instance."""
 | 
						|
        self.photos_factory = photos_factory
 | 
						|
        self._main_photo = None
 | 
						|
 | 
						|
    @property
 | 
						|
    def main_photo(self):
 | 
						|
        """Return user's main photo."""
 | 
						|
        if not self._main_photo:
 | 
						|
            self._main_photo = self.photos_factory()
 | 
						|
        return self._main_photo
 | 
						|
 | 
						|
 | 
						|
# Defining User and Photo factories using DelegatedFactory provider:
 | 
						|
photos_factory = providers.DelegatedFactory(Photo)
 | 
						|
users_factory = providers.DelegatedFactory(User,
 | 
						|
                                           photos_factory=photos_factory)
 | 
						|
 | 
						|
# or using Delegate(Factory(...))
 | 
						|
 | 
						|
photos_factory = providers.Factory(Photo)
 | 
						|
users_factory = providers.Factory(User,
 | 
						|
                                  photos_factory=providers.Delegate(
 | 
						|
                                      photos_factory))
 | 
						|
 | 
						|
 | 
						|
# or using Factory(...).delegate()
 | 
						|
 | 
						|
photos_factory = providers.Factory(Photo)
 | 
						|
users_factory = providers.Factory(User,
 | 
						|
                                  photos_factory=photos_factory.delegate())
 | 
						|
 | 
						|
 | 
						|
# Creating several User objects:
 | 
						|
user1 = users_factory()  # Same as: user1 = User(photos_factory=photos_factory)
 | 
						|
user2 = users_factory()  # Same as: user2 = User(photos_factory=photos_factory)
 | 
						|
 | 
						|
# Making some asserts:
 | 
						|
assert isinstance(user1.main_photo, Photo)
 | 
						|
assert isinstance(user2.main_photo, Photo)
 | 
						|
 | 
						|
# or using Factory(...).provider
 | 
						|
 | 
						|
photos_factory = providers.Factory(Photo)
 | 
						|
users_factory = providers.Factory(User,
 | 
						|
                                  photos_factory=photos_factory.provider)
 | 
						|
 | 
						|
 | 
						|
# Creating several User objects:
 | 
						|
user1 = users_factory()  # Same as: user1 = User(photos_factory=photos_factory)
 | 
						|
user2 = users_factory()  # Same as: user2 = User(photos_factory=photos_factory)
 | 
						|
 | 
						|
# Making some asserts:
 | 
						|
assert isinstance(user1.main_photo, Photo)
 | 
						|
assert isinstance(user2.main_photo, Photo)
 |