Source code for traits.testing.optional_dependencies
# (C) Copyright 2005-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
import importlib
import unittest
[docs]def optional_import(name):
"""
Optionally import a module, returning None if that module is unavailable.
Parameters
----------
name : Str
The name of the module being imported.
Returns
-------
None or module
None if the module is not available, and the module otherwise.
"""
try:
module = importlib.import_module(name)
except ImportError:
return None
else:
return module
# Commonly-used unittest skip decorators.
cython = optional_import("cython")
requires_cython = unittest.skipIf(cython is None, "Cython not available")
mypy = optional_import("mypy")
requires_mypy = unittest.skipIf(mypy is None, "Mypy not available")
numpy = optional_import("numpy")
requires_numpy = unittest.skipIf(numpy is None, "NumPy not available")
numpy_typing = optional_import("numpy.typing")
requires_numpy_typing = unittest.skipIf(
numpy_typing is None, "numpy.typing not available")
pkg_resources = optional_import("pkg_resources")
requires_pkg_resources = unittest.skipIf(
pkg_resources is None, "pkg_resources not available"
)
pyface = optional_import("pyface")
requires_pyface = unittest.skipIf(pyface is None, "Pyface not available")
sphinx = optional_import("sphinx")
requires_sphinx = unittest.skipIf(sphinx is None, "Sphinx not available")
traitsui = optional_import("traitsui")
requires_traitsui = unittest.skipIf(traitsui is None, "TraitsUI not available")
# Import traitsui.api so that client code can use traitsui.api directly without
# an extra import.
if traitsui is not None:
import traitsui.api