python-dependency-injector/examples/catalogs/subsets.py

63 lines
1.6 KiB
Python
Raw Normal View History

2015-10-11 15:34:21 +03:00
"""Catalog subsets example."""
import dependency_injector as di
# Declaring example services catalog:
class Services(di.AbstractCatalog):
"""Example catalog of service providers."""
users = di.Provider()
auth = di.Provider()
photos = di.Provider()
# Declaring example base class for some web views:
class BaseWebView(object):
"""Example base class of web view."""
def __init__(self, services):
"""Initializer.
:type services: Services
:param services: Subset of service providers
"""
self.services = services
# Declaring several example web views:
class AuthView(BaseWebView):
"""Example auth web view."""
class PhotosView(BaseWebView):
"""Example photo processing web view."""
# Creating example views with appropriate service provider subsets:
2015-10-14 17:51:05 +03:00
auth_view = AuthView(di.Subset(Services.users,
Services.auth))
photos_view = PhotosView(di.Subset(Services.users,
Services.photos))
2015-10-11 15:34:21 +03:00
# 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 subset,
# 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 subset, so `di.Error` will be raised.
pass