Source code for owmeta_core.capable_configurable

import logging

from .configure import Configurable
from .capability import Capable, provide
from .utils import retrieve_provider


CAPABILITY_PROVIDERS_KEY = 'capability.providers'


[docs]class CapableConfigurable(Capable, Configurable): ''' Helper class for `.Capable` objects that are also `.Configurable` Takes the providers from the :confval:`capability.providers` configuration value and calls `provide` with the resulting providers. If the value is unset or empty, then `provide` will not be called. .. confval:: capability.providers a list of `"provider path" <.utils.retrieve_provider>` strings or `Providers <.capability.Provider>` ''' def __init__(self, *args, **kwargs): ''' Raises ------ NoProviderAvailable if any of the needed capabilities cannot be provided ''' super().__init__(*args, **kwargs) conf_providers = self.conf.get(CAPABILITY_PROVIDERS_KEY, []) if conf_providers: providers = [] for p in conf_providers: if isinstance(p, str): provider = retrieve_provider(p)() else: provider = p if not provider: raise Exception('No provider found for ' + p) providers.append(provider) provide(self, providers) else: logging.debug("No providers for %s in %r", self, self.conf)