jupyter
This commit is contained in:
124
packages/python/yap_kernel/yap_ipython/utils/module_paths.py
Normal file
124
packages/python/yap_kernel/yap_ipython/utils/module_paths.py
Normal file
@@ -0,0 +1,124 @@
|
||||
"""Utility functions for finding modules
|
||||
|
||||
Utility functions for finding modules on sys.path.
|
||||
|
||||
`find_mod` finds named module on sys.path.
|
||||
|
||||
`get_init` helper function that finds __init__ file in a directory.
|
||||
|
||||
`find_module` variant of imp.find_module in std_lib that only returns
|
||||
path to module and not an open file object as well.
|
||||
|
||||
|
||||
|
||||
"""
|
||||
#-----------------------------------------------------------------------------
|
||||
# Copyright (c) 2011, the yap_ipython Development Team.
|
||||
#
|
||||
# Distributed under the terms of the Modified BSD License.
|
||||
#
|
||||
# The full license is in the file COPYING.txt, distributed with this software.
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Imports
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
# Stdlib imports
|
||||
import imp
|
||||
import os
|
||||
|
||||
# Third-party imports
|
||||
|
||||
# Our own imports
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Globals and constants
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Local utilities
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Classes and functions
|
||||
#-----------------------------------------------------------------------------
|
||||
def find_module(name, path=None):
|
||||
"""imp.find_module variant that only return path of module.
|
||||
|
||||
The `imp.find_module` returns a filehandle that we are not interested in.
|
||||
Also we ignore any bytecode files that `imp.find_module` finds.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
name : str
|
||||
name of module to locate
|
||||
path : list of str
|
||||
list of paths to search for `name`. If path=None then search sys.path
|
||||
|
||||
Returns
|
||||
-------
|
||||
filename : str
|
||||
Return full path of module or None if module is missing or does not have
|
||||
.py or .pyw extension
|
||||
"""
|
||||
if name is None:
|
||||
return None
|
||||
try:
|
||||
file, filename, _ = imp.find_module(name, path)
|
||||
except ImportError:
|
||||
return None
|
||||
if file is None:
|
||||
return filename
|
||||
else:
|
||||
file.close()
|
||||
if os.path.splitext(filename)[1] in [".py", ".pyc"]:
|
||||
return filename
|
||||
else:
|
||||
return None
|
||||
|
||||
def get_init(dirname):
|
||||
"""Get __init__ file path for module directory
|
||||
|
||||
Parameters
|
||||
----------
|
||||
dirname : str
|
||||
Find the __init__ file in directory `dirname`
|
||||
|
||||
Returns
|
||||
-------
|
||||
init_path : str
|
||||
Path to __init__ file
|
||||
"""
|
||||
fbase = os.path.join(dirname, "__init__")
|
||||
for ext in [".py", ".pyw"]:
|
||||
fname = fbase + ext
|
||||
if os.path.isfile(fname):
|
||||
return fname
|
||||
|
||||
|
||||
def find_mod(module_name):
|
||||
"""Find module `module_name` on sys.path
|
||||
|
||||
Return the path to module `module_name`. If `module_name` refers to
|
||||
a module directory then return path to __init__ file. Return full
|
||||
path of module or None if module is missing or does not have .py or .pyw
|
||||
extension. We are not interested in running bytecode.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
module_name : str
|
||||
|
||||
Returns
|
||||
-------
|
||||
modulepath : str
|
||||
Path to module `module_name`.
|
||||
"""
|
||||
parts = module_name.split(".")
|
||||
basepath = find_module(parts[0])
|
||||
for submodname in parts[1:]:
|
||||
basepath = find_module(submodname, [basepath])
|
||||
if basepath and os.path.isdir(basepath):
|
||||
basepath = get_init(basepath)
|
||||
return basepath
|
||||
Reference in New Issue
Block a user