diff --git a/examples/catalogs/bundles/catalogs.py b/examples/catalogs/bundles/catalogs.py new file mode 100644 index 00000000..3d876c0e --- /dev/null +++ b/examples/catalogs/bundles/catalogs.py @@ -0,0 +1,59 @@ +"""Catalog bundles example.""" + +import dependency_injector as di + +import services +import views + + +# Declaring services catalog: +class Services(di.AbstractCatalog): + """Example catalog of service providers.""" + + users = di.Factory(services.UsersService) + """:type: (di.Provider) -> services.UsersService""" + + auth = di.Factory(services.AuthService) + """:type: (di.Provider) -> services.AuthService""" + + photos = di.Factory(services.PhotosService) + """:type: (di.Provider) -> services.PhotosService""" + + +# Declaring views catalog: +class Views(di.AbstractCatalog): + """Example catalog of web views.""" + + auth = di.Factory(views.AuthView, + services=Services.Bundle(Services.users, + Services.auth)) + """:type: (di.Provider) -> views.AuthView""" + + photos = di.Factory(views.PhotosView, + services=Services.Bundle(Services.users, + Services.photos)) + """:type: (di.Provider) -> views.PhotosView""" + + +# Creating example views: +auth_view = Views.auth() +photos_view = Views.photos() + +# 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 di.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 di.Error as exception: + # `auth` service provider is not in scope of `photo_processing_view` + # services bundle, so `di.Error` will be raised. + pass diff --git a/examples/catalogs/bundles/services.py b/examples/catalogs/bundles/services.py new file mode 100644 index 00000000..91b9cae5 --- /dev/null +++ b/examples/catalogs/bundles/services.py @@ -0,0 +1,17 @@ +"""Example services.""" + + +class BaseService(object): + """Example base class of service.""" + + +class UsersService(BaseService): + """Example users service.""" + + +class AuthService(BaseService): + """Example auth service.""" + + +class PhotosService(BaseService): + """Example photo service.""" diff --git a/examples/catalogs/bundles/views.py b/examples/catalogs/bundles/views.py new file mode 100644 index 00000000..658ff9f0 --- /dev/null +++ b/examples/catalogs/bundles/views.py @@ -0,0 +1,21 @@ +"""Example web views.""" + + +class BaseWebView(object): + """Example base class of web view.""" + + def __init__(self, services): + """Initializer. + + :type services: Services + :param services: Bundle of service providers + """ + self.services = services + + +class AuthView(BaseWebView): + """Example auth web view.""" + + +class PhotosView(BaseWebView): + """Example photo processing web view."""