Skip to content

Dependencies

provide.foundation.errors.dependencies

Dependency-related exceptions.

Classes

DependencyError

DependencyError(
    package: str,
    *,
    feature: str | None = None,
    install_command: str | None = None,
    **kwargs: Any
)

Bases: FoundationError

Raised when an optional dependency is required but not installed.

Parameters:

Name Type Description Default
package str

Name of the missing package

required
feature str | None

Optional feature name that requires the package

None
install_command str | None

Optional custom installation command

None
**kwargs Any

Additional context passed to FoundationError

{}

Examples:

>>> raise DependencyError("cryptography", feature="crypto")
>>> raise DependencyError("requests", install_command="pip install requests")
Source code in provide/foundation/errors/dependencies.py
def __init__(
    self,
    package: str,
    *,
    feature: str | None = None,
    install_command: str | None = None,
    **kwargs: Any,
) -> None:
    # Determine the installation command
    # Feature takes priority over custom install_command
    if feature:
        cmd = f"pip install 'provide-foundation[{feature}]'"
    elif install_command:
        cmd = install_command
    else:
        cmd = f"pip install {package}"

    # Create the error message
    message = f"Optional dependency '{package}' is required for this feature. Install with: {cmd}"

    # Add context
    context = kwargs.setdefault("context", {})
    context["dependency.package"] = package
    context["dependency.install_command"] = cmd
    if feature:
        context["dependency.feature"] = feature

    super().__init__(message, **kwargs)

DependencyMismatchError

DependencyMismatchError(
    package: str,
    *,
    required_version: str,
    current_version: str,
    **kwargs: Any
)

Bases: FoundationError

Raised when a dependency version doesn't meet requirements.

Parameters:

Name Type Description Default
package str

Name of the package with version mismatch

required
required_version str

Required version or constraint

required
current_version str

Currently installed version

required
**kwargs Any

Additional context passed to FoundationError

{}

Examples:

>>> raise DependencyMismatchError("cryptography", ">=3.0.0", "2.9.2")
Source code in provide/foundation/errors/dependencies.py
def __init__(
    self,
    package: str,
    *,
    required_version: str,
    current_version: str,
    **kwargs: Any,
) -> None:
    message = (
        f"Package '{package}' version {current_version} does not meet "
        f"requirement {required_version}. Please upgrade with: "
        f"pip install '{package}{required_version}'"
    )

    # Add context
    context = kwargs.setdefault("context", {})
    context["dependency.package"] = package
    context["dependency.required_version"] = required_version
    context["dependency.current_version"] = current_version

    super().__init__(message, **kwargs)