2016-06-08 13:39:53 +00:00
|
|
|
"""`Factory` providers init injections example."""
|
|
|
|
|
|
|
|
import collections
|
2016-06-08 13:54:47 +00:00
|
|
|
|
2016-06-08 13:39:53 +00:00
|
|
|
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)
|