"""Catalog bundles example.""" from dependency_injector import catalogs from dependency_injector import providers from dependency_injector import errors import services import views # Declaring services catalog: class Services(catalogs.DeclarativeCatalog): """Example catalog of service providers.""" users = providers.Factory(services.Users) auth = providers.Factory(services.Auth) photos = providers.Factory(services.Photos) # Declaring views catalog: class Views(catalogs.DeclarativeCatalog): """Example catalog of web views.""" auth = providers.Factory(views.Auth, services=Services.Bundle(Services.users, Services.auth)) photos = providers.Factory(views.Photos, services=Services.Bundle(Services.users, Services.photos)) # Creating example views: auth_view = Views.auth() photos_view = Views.photos() print auth_view.services # prints: <__main__.Services.Bundle(users, auth)> print photos_view.services # prints <__main__.Services.Bundle(photos, users)> # Making some asserts: assert auth_view.services.users is Services.users assert auth_view.services.auth is Services.auth try: auth_view.services.photos except errors.Error: # `photos` service provider is not in scope of `auth_view` services bundle, # so `di.Error` will be raised. pass assert photos_view.services.users is Services.users assert photos_view.services.photos is Services.photos try: photos_view.services.auth except errors.Error as exception: # `auth` service provider is not in scope of `photo_processing_view` # services bundle, so `di.Error` will be raised. pass