mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 07:57:43 +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)
 |