"""`Factory` providers init injections example.""" import collections import dependency_injector.providers as providers CreditCard = collections.namedtuple('CreditCard', []) Photo = collections.namedtuple('Photo', []) User = collections.namedtuple('User', ['uid', 'main_photo', 'credit_card']) # User, Photo and CreditCard factories: credit_cards_factory = providers.Factory(CreditCard) photos_factory = providers.Factory(Photo) users_factory = providers.Factory(User, main_photo=photos_factory, credit_card=credit_cards_factory) # Creating several User objects: user1 = users_factory(1) # Same as: user1 = User(1, # main_photo=Photo(), # credit_card=CreditCard()) user2 = users_factory(2) # Same as: user2 = User(2, # main_photo=Photo(), # credit_card=CreditCard()) # Context keyword arguments have priority on keyword argument injections: main_photo = Photo() credit_card = CreditCard() user3 = users_factory(3, main_photo=main_photo, credit_card=credit_card) # Same as: user3 = User(3, # main_photo=main_photo, # credit_card=credit_card)