Update catalog bundles example

This commit is contained in:
Roman Mogilatov 2015-10-19 10:31:21 +03:00
parent 47127e2839
commit 6206cdde8d
3 changed files with 97 additions and 0 deletions

View File

@ -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

View File

@ -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."""

View File

@ -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."""