Beispiel #1
0
def get_providers(*, only_secure: bool = False) -> 'List[Provider1]':
    """
    Find and load all providers that are available.

    :param only_secure:
        (keyword only) Return only providers that are deemed secure.
    :returns:
        A list of Provider1 objects, created in no particular order.

    This function can be used to get a list of all available providers. Most
    applications will just want the default, regular list of providers, without
    bothering to restrict themselves to the secure subset.

    Those are the providers that can run jobs as root using the
    ``plainbox-trusted-launcher-1`` mechanism. Depending on the *policykit*
    Policy, those might start without prompting the user for the password. If
    you want to load only them, use the `only_secure` option.
    """
    if only_secure:
        from plainbox.impl.secure.providers.v1 import all_providers
    else:
        from plainbox.impl.providers.v1 import all_providers
    from plainbox.impl.providers import special
    all_providers.load()
    return [
        special.get_manifest(),
        special.get_exporters(),
        special.get_categories(),
    ] + all_providers.get_all_plugin_objects()
Beispiel #2
0
 def _create_exporter(self, exporter_id):
     exporter_map = {}
     exporter_units = get_exporters().unit_list
     for unit in exporter_units:
         if unit.Meta.name == 'exporter':
             support = unit.support
             if support:
                 exporter_map[unit.id] = support
     exporter_support = exporter_map[exporter_id]
     return exporter_support.exporter_cls([],
                                          exporter_unit=exporter_support)
Beispiel #3
0
def get_providers(*, only_secure: bool=False) -> 'List[Provider1]':
    """
    Find and load all providers that are available.

    :param only_secure:
        (keyword only) Return only providers that are deemed secure.
    :returns:
        A list of Provider1 objects, created in no particular order.

    This function can be used to get a list of all available providers. Most
    applications will just want the default, regular list of providers, without
    bothering to restrict themselves to the secure subset.

    Those are the providers that can run jobs as root using the
    ``plainbox-trusted-launcher-1`` mechanism. Depending on the *policykit*
    Policy, those might start without prompting the user for the password. If
    you want to load only them, use the `only_secure` option.
    """
    from plainbox.impl.providers import special
    if only_secure:
        from plainbox.impl.secure.providers.v1 import all_providers
    else:
        from plainbox.impl.providers.v1 import all_providers
    all_providers.load()
    std_providers= [
        special.get_manifest(),
        special.get_exporters(),
        special.get_categories(),
    ] + all_providers.get_all_plugin_objects()
    if only_secure:
        return std_providers

    def qualified_name(provider):
        return "{}:{}".format(provider.namespace, provider.name)
    sideload_path = os.path.expandvars(os.path.join(
        '/var', 'tmp', 'checkbox-providers'))
    embedded_providers = EmbeddedProvider1PlugInCollection(sideload_path)
    loaded_provs = embedded_providers.get_all_plugin_objects()
    for p in loaded_provs:
        logger.warning("Using sideloaded provider: %s from %s", p, p.base_dir)
    sl_qual_names = [qualified_name(p) for p in loaded_provs]
    for std_prov in std_providers:
        if qualified_name(std_prov) in sl_qual_names:
            # this provider got overriden by sideloading
            # so let's not load the original one
            continue
        loaded_provs.append(std_prov)
    if not loaded_provs:
        message = '\n'.join(( _("No providers found! Paths searched:"),
            *all_providers.provider_search_paths))
        raise SystemExit(message)
    return loaded_provs
Beispiel #4
0
 def _load_providers(self):
     logger.info("Loading stubbox provider...")
     from plainbox.impl.providers.special import get_stubbox
     from plainbox.impl.providers.special import get_exporters
     return [get_stubbox(), get_exporters()]