hookspec

Pluggy hook specifications ("hookspecs") to register conda plugins.

Each hookspec defined in CondaSpecs contains an example of how to use it.

Classes

CondaSpecs

The conda plugin hookspecs, to be used by developers.

Attributes

spec_name

Name used for organizing conda hook specifications

_hookspec

The conda plugin hook specifications, to be used by developers

hookimpl

Decorator used to mark plugin hook implementations

spec_name = 'conda'

Name used for organizing conda hook specifications

_hookspec

The conda plugin hook specifications, to be used by developers

hookimpl

Decorator used to mark plugin hook implementations

class CondaSpecs

The conda plugin hookspecs, to be used by developers.

conda_solvers() collections.abc.Iterable[conda.plugins.types.CondaSolver]

Register solvers in conda.

Example:

import logging

from conda import plugins
from conda.core import solve

log = logging.getLogger(__name__)


class VerboseSolver(solve.Solver):
    def solve_final_state(self, *args, **kwargs):
        log.info("My verbose solver!")
        return super().solve_final_state(*args, **kwargs)


@plugins.hookimpl
def conda_solvers():
    yield plugins.CondaSolver(
        name="verbose-classic",
        backend=VerboseSolver,
    )
Returns

An iterable of solver entries.

conda_subcommands() collections.abc.Iterable[conda.plugins.types.CondaSubcommand]

Register external subcommands in conda.

Example:

from conda import plugins


def example_command(args):
    print("This is an example command!")


@plugins.hookimpl
def conda_subcommands():
    yield plugins.CondaSubcommand(
        name="example",
        summary="example command",
        action=example_command,
    )
Returns

An iterable of subcommand entries.

conda_virtual_packages() collections.abc.Iterable[conda.plugins.types.CondaVirtualPackage]

Register virtual packages in Conda.

Example:

from conda import plugins


@plugins.hookimpl
def conda_virtual_packages():
    yield plugins.CondaVirtualPackage(
        name="my_custom_os",
        version="1.2.3",
        build="x86_64",
    )
Returns

An iterable of virtual package entries.

conda_pre_commands() collections.abc.Iterable[conda.plugins.types.CondaPreCommand]

Register pre-command functions in conda.

Example:

from conda import plugins


def example_pre_command(command):
    print("pre-command action")


@plugins.hookimpl
def conda_pre_commands():
    yield CondaPreCommand(
        name="example-pre-command",
        action=example_pre_command,
        run_for={"install", "create"},
    )
conda_post_commands() collections.abc.Iterable[conda.plugins.types.CondaPostCommand]

Register post-command functions in conda.

Example:

from conda import plugins


def example_post_command(command):
    print("post-command action")


@plugins.hookimpl
def conda_post_commands():
    yield CondaPostCommand(
        name="example-post-command",
        action=example_post_command,
        run_for={"install", "create"},
    )
conda_auth_handlers() collections.abc.Iterable[conda.plugins.types.CondaAuthHandler]

Register a conda auth handler derived from the requests API.

This plugin hook allows attaching requests auth handler subclasses, e.g. when authenticating requests against individual channels hosted at HTTP/HTTPS services.

Example:

import os
from conda import plugins
from requests.auth import AuthBase


class EnvironmentHeaderAuth(AuthBase):
    def __init__(self, *args, **kwargs):
        self.username = os.environ["EXAMPLE_CONDA_AUTH_USERNAME"]
        self.password = os.environ["EXAMPLE_CONDA_AUTH_PASSWORD"]

    def __call__(self, request):
        request.headers["X-Username"] = self.username
        request.headers["X-Password"] = self.password
        return request


@plugins.hookimpl
def conda_auth_handlers():
    yield plugins.CondaAuthHandler(
        name="environment-header-auth",
        auth_handler=EnvironmentHeaderAuth,
    )