Source code for tcutility.environment
import functools
import os
from importlib.util import find_spec
from typing import Optional
from tcutility import errors
[docs]
def requires_optional_package(package_name: str, os_name: Optional[str] = None):
"""
Ensures a given package is available before running a function, otherwise raises an ImportError.
This can be used to check for optional dependencies which are required for specific functionality.
Arguments:
package_name (str): name of the required package
os_name (Optional[str]): name of the os that this package must be specified on, if omitted defaults to all os
"""
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
if (os_name is None or os.name == os_name) and find_spec(package_name) is None:
raise errors.MissingOptionalPackageError(package_name)
return func(*args, **kwargs)
return wrapper
return decorator