You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
"""Utilities for Python JSON Logger"""
|
|
|
|
### IMPORTS
|
|
### ============================================================================
|
|
## Future
|
|
from __future__ import annotations
|
|
|
|
## Standard Library
|
|
import importlib.util
|
|
|
|
## Installed
|
|
|
|
## Application
|
|
from .exception import MissingPackageError
|
|
|
|
|
|
### FUNCTIONS
|
|
### ============================================================================
|
|
def package_is_available(
|
|
name: str, *, throw_error: bool = False, extras_name: str | None = None
|
|
) -> bool:
|
|
"""Determine if the given package is available for import.
|
|
|
|
Args:
|
|
name: Import name of the package to check.
|
|
throw_error: Throw an error if the package is unavailable.
|
|
extras_name: Extra dependency name to use in `throw_error`'s message.
|
|
|
|
Raises:
|
|
MissingPackageError: When `throw_error` is `True` and the return value would be `False`
|
|
|
|
Returns:
|
|
If the package is available for import.
|
|
"""
|
|
available = importlib.util.find_spec(name) is not None
|
|
|
|
if not available and throw_error:
|
|
raise MissingPackageError(name, extras_name)
|
|
|
|
return available
|