Source code for autowire.context

"""
autowire.context.impl
=====================

Context's implementations

"""
from autowire.base import BaseContext, BaseResource
from autowire.impl import Implementation

from .provider import Provider, ImplementationConsumer
from .root import root_context


[docs]class Context(BaseContext, ImplementationConsumer): """ Context implementation. """ def __init__(self, parent: BaseContext=root_context): self.parent = parent self.implementations = {}
[docs] def get_implementation(self, resource: BaseResource): """Get resource implementation from this context.""" return self.implementations[resource.canonical_name]
[docs] def provided_by(self, resource: BaseResource): """Find context that provides resource.""" if resource.canonical_name in self.implementations: return self elif self.parent is not None: return self.parent.provided_by(resource)
[docs] def set_implementation(self, resource: BaseResource, implementation: Implementation): self.implementations[resource.canonical_name] = implementation
[docs] def provide(self, resource: BaseResource): """ Resource resource's implementation provider which is :class:`Implementable` :: @autowired(context.provide(resource), dependency1, dependency2) @contextlib.contextmanager def create_resource(dependency1, dependency2): yield dependency1.make_resource(dependency2) __call__ method is alias for this method :: @autowired(context(resource), dependency1, dependency2) @contextlib.contextmanager def create_resource(dependency1, dependency2): yield dependency1.make_resource(dependency2) """ return Provider(resource, self)
def __call__(self, resource: BaseResource): return self.provide(resource)
__all__ = ['Context', 'root_context']