| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | """Re-implementation of find_module and get_frozen_objectfrom the deprecated imp module."""import osimport importlib.utilimport importlib.machineryfrom .py34compat import module_from_specPY_SOURCE = 1PY_COMPILED = 2C_EXTENSION = 3C_BUILTIN = 6PY_FROZEN = 7def find_spec(module, paths):    finder = (        importlib.machinery.PathFinder().find_spec        if isinstance(paths, list) else        importlib.util.find_spec    )    return finder(module, paths)def find_module(module, paths=None):    """Just like 'imp.find_module()', but with package support"""    spec = find_spec(module, paths)    if spec is None:        raise ImportError("Can't find %s" % module)    if not spec.has_location and hasattr(spec, 'submodule_search_locations'):        spec = importlib.util.spec_from_loader('__init__.py', spec.loader)    kind = -1    file = None    static = isinstance(spec.loader, type)    if spec.origin == 'frozen' or static and issubclass(            spec.loader, importlib.machinery.FrozenImporter):        kind = PY_FROZEN        path = None  # imp compabilty        suffix = mode = ''  # imp compatibility    elif spec.origin == 'built-in' or static and issubclass(            spec.loader, importlib.machinery.BuiltinImporter):        kind = C_BUILTIN        path = None  # imp compabilty        suffix = mode = ''  # imp compatibility    elif spec.has_location:        path = spec.origin        suffix = os.path.splitext(path)[1]        mode = 'r' if suffix in importlib.machinery.SOURCE_SUFFIXES else 'rb'        if suffix in importlib.machinery.SOURCE_SUFFIXES:            kind = PY_SOURCE        elif suffix in importlib.machinery.BYTECODE_SUFFIXES:            kind = PY_COMPILED        elif suffix in importlib.machinery.EXTENSION_SUFFIXES:            kind = C_EXTENSION        if kind in {PY_SOURCE, PY_COMPILED}:            file = open(path, mode)    else:        path = None        suffix = mode = ''    return file, path, (suffix, mode, kind)def get_frozen_object(module, paths=None):    spec = find_spec(module, paths)    if not spec:        raise ImportError("Can't find %s" % module)    return spec.loader.get_code(module)def get_module(module, paths, info):    spec = find_spec(module, paths)    if not spec:        raise ImportError("Can't find %s" % module)    return module_from_spec(spec)
 |