pip_services3_commons.refer.DependencyResolver module

pip_services3_commons.refer.DependencyResolver

Dependency resolver component implementation

copyright

Conceptual Vision Consulting LLC 2018-2019, see AUTHORS for more details.

license

MIT, see LICENSE for more details.

class pip_services3_commons.refer.DependencyResolver.DependencyResolver(config: pip_services3_commons.config.ConfigParams.ConfigParams = None, references: pip_services3_commons.refer.IReferences.IReferences = None)

Bases: pip_services3_commons.config.IReconfigurable.IReconfigurable, pip_services3_commons.refer.IReferenceable.IReferenceable

Helper class for resolving component dependencies. The resolver is configured to resolve named dependencies by specific locator. During deployment the dependency locator can be changed.

This mechanism can be used to clarify specific dependency among several alternatives. Typically components are configured to retrieve the first dependency that matches logical group, type and version. But if container contains more than one instance and resolution has to be specific about those instances, they can be given a unique name and dependency resolvers can be reconfigured to retrieve dependencies by their name.

### Configuration parameters ### dependencies:

  • [dependency name 1]: Dependency 1 locator (descriptor)

  • [dependency name N]: Dependency N locator (descriptor)

References:
  • References must match configured dependencies.

Example:

class MyComponent(IConfigurable, IReferenceable):
    _dependencyResolver = None
    _persistence = None

    def __init__(self):
        self._dependencyResolver.put("persistence", new Descriptor("mygroup", "persistence", "*", "*", "1.0"))

    def configure(self, config):
        self._dependencyResolver.configure(config)

    def set_references(self, references):
        self._dependencyResolver.setReferences(references)
        self._persistence = self._dependencyResolver.get_one_required("persistence")

    component = MyComponent()
    component.configure(ConfigParams.from_tuples(
    "dependencies.persistence", "mygroup:persistence:*:persistence2:1.0"))

    component.set_references(References.from_tuples(Descriptor("mygroup","persistence","*","persistence1","1.0"),
    MyPersistence(),
    Descriptor("mygroup","persistence","*","persistence2","1.0"), MyPersistence()
    # This dependency shall be set))
configure(config: pip_services3_commons.config.ConfigParams.ConfigParams)

Configures the component with specified parameters.

Parameters

config – configuration parameters to set.

find(name: str, required: bool) → Optional[List[Any], None]

Finds all matching dependencies by their name.

Parameters
  • name – the dependency name to locate.

  • required – true to raise an error when no dependencies are found.

Returns

a list of found dependencies

static from_tuples(*tuples: Any)pip_services3_commons.refer.DependencyResolver.DependencyResolver

Creates a new DependencyResolver from a list of key-args pairs called tuples where key is dependency name and args the depedency locator (descriptor).

Parameters

tuples – a list of values where odd elements are dependency name

and the following even elements are dependency locator (descriptor)

Returns

a newly created DependencyResolver.

get_one_optional(name: str) → Any

Gets one optional dependency by its name.

Parameters

name – the dependency name to locate.

Returns

a dependency reference or null of the dependency was not found

get_one_required(name: str) → Any

Gets one __required dependency by its name. At least one dependency must present. If the dependency was found it throws a ReferenceException

Parameters

name – the dependency name to locate.

Returns

a dependency reference

get_optional(name: str) → List[Any]

Gets all optional dependencies by their name.

Parameters

name – the dependency name to locate.

Returns

a list with found dependencies or empty list of no dependencies was found.

get_required(name: str) → List[Any]

Gets all __required dependencies by their name. At least one dependency must be present. If no dependencies was found it throws a ReferenceException

Parameters

name – the dependency name to locate.

Returns

a list with found dependencies.

put(name: str, locator: Any)

Adds a new dependency into this resolver.

Parameters
  • name – the dependency’s name.

  • locator – the locator to find the dependency by.

set_references(references: pip_services3_commons.refer.IReferences.IReferences)

Sets the component references. References must match configured dependencies.

Parameters

references – references to set.