Source code for venvmod.commands.test_imports

"""Tests import of Pyhton packages."""
import importlib
from typing import List

from ..tools import remove_duplicates
from . import get_parser


def _test_module_import(module_name: str, verbose: bool) -> str:
    """Test module import.

    Parameters
    ----------
    module_name : str
        Name of the module to test.
    verbose : bool
        True to print result.

    Returns
    -------
    str
        Import error description if any. Else None.
    """

    error = None
    try:
        module = importlib.import_module(module_name)
    except ImportError as err:
        error = err

    if verbose:
        print(f">>> import {module_name}:")
        if error:
            print(f"  FAILED {error}")
        else:
            if hasattr(module, "__file__"):
                print(f"  {module.__file__}")
            elif hasattr(module, "__name__"):
                print(f"  {module.__name__}")
    return error


[docs]def test_imports(arguments: List[str] = None) -> int: """Test import modules Parameters ---------- arguments : List[str], optional modules to test, by default None Returns ------- int return code """ if arguments is None: options = get_parser(description="Test module import.", positionals=[("MODULE", [], "List of Python modules to test.", '+')], with_appli=False) arguments = options.MODULE if options.verbose: print("Testing env :") failed = {} for module in remove_duplicates(arguments): error = _test_module_import(module, options.verbose) if error: failed[module] = error return len(failed)