Source code for xiuminglib.imprt

from importlib import import_module

from .log import get_logger
logger = get_logger()

# For < Python 3.6
try:
    ModuleNotFoundError
except NameError:
    ModuleNotFoundError = ImportError


[docs]def preset_import(name, assert_success=False): """A unified importer for both regular and ``google3`` modules, according to specified presets/profiles (e.g., ignoring ``ModuleNotFoundError``). """ if name == 'cv2': try: # BUILD dep: # "//third_party/py/cvx2", from cvx2 import latest as mod # Or # BUILD dep: # "//third_party/OpenCVX:cvx2", # from google3.third_party.OpenCVX import cvx2 as cv2 except ModuleNotFoundError: mod = import_module_404ok('cv2') elif name == 'gfile': # BUILD deps: # "//pyglib:gfile", # "//file/colossus/cns", mod = import_module_404ok('google3.pyglib.gfile') elif name == 'video_api': # BUILD dep: # "//learning/deepmind/video/python:video_api", mod = import_module_404ok( 'google3.learning.deepmind.video.python.video_api') elif name in ('tensorflow', 'bpy', 'bmesh', 'OpenEXR', 'Imath'): # BUILD deps: # "//third_party/py/Imath", # "//third_party/py/OpenEXR", mod = import_module_404ok(name) elif name in ('Vector', 'Matrix', 'Quaternion'): mod = import_module_404ok('mathutils') mod = _get_module_class(mod, name) elif name == 'BVHTree': mod = import_module_404ok('mathutils.bvhtree') mod = _get_module_class(mod, name) elif name == 'Image': mod = import_module_404ok('PIL') mod = _get_module_class(mod, name) else: raise NotImplementedError(name) if assert_success: assert mod is not None, "Failed in importing '%s'" % name return mod
[docs]def import_module_404ok(*args, **kwargs): """Returns ``None`` (instead of failing) in the case of ``ModuleNotFoundError``. """ try: mod = import_module(*args, **kwargs) except (ModuleNotFoundError, ImportError) as e: mod = None logger.debug("Ignored: %s", str(e)) return mod
def _get_module_class(mod, clsname): if mod is None: return None return getattr(mod, clsname)