Decorator to run a test if and only if optional modules are installed
PARAMETER | DESCRIPTION |
modules | Module name or list of module names TYPE: Union[str, Iterable[str]] |
dep_target | Target name for pip installation (e.g. 'test' in pip install ag2[test]) TYPE: str |
Source code in autogen/import_utils.py
| def run_for_optional_imports(modules: Union[str, Iterable[str]], dep_target: str) -> Callable[[G], G]:
"""Decorator to run a test if and only if optional modules are installed
Args:
modules: Module name or list of module names
dep_target: Target name for pip installation (e.g. 'test' in pip install ag2[test])
"""
# missing_modules = get_missing_imports(modules)
# if missing_modules:
# raise ImportError(f"Missing module{'s' if len(missing_modules) > 1 else ''}: {', '.join(missing_modules)}. Install using 'pip install ag2[{dep_target}]'")
def decorator(o: G) -> G:
missing_modules = get_missing_imports(modules)
if isinstance(o, type):
wrapped = require_optional_import(modules, dep_target)(o)
else:
if inspect.iscoroutinefunction(o):
@wraps(o)
async def wrapped(*args: Any, **kwargs: Any) -> Any:
if missing_modules:
raise ImportError(
f"Missing module{'s' if len(missing_modules) > 1 else ''}: {', '.join(missing_modules)}. Install using 'pip install ag2[{dep_target}]'"
)
return await o(*args, **kwargs)
else:
@wraps(o)
def wrapped(*args: Any, **kwargs: Any) -> Any:
if missing_modules:
raise ImportError(
f"Missing module{'s' if len(missing_modules) > 1 else ''}: {', '.join(missing_modules)}. Install using 'pip install ag2[{dep_target}]'"
)
return o(*args, **kwargs)
pytest_mark_o: G = _mark_object(wrapped, dep_target) # type: ignore[assignment]
return pytest_mark_o
return decorator
|