aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2015-08-17 19:21:19 -0400
committerJustin M. Keyes <justinkz@gmail.com>2015-08-17 19:21:19 -0400
commit681ee8131c1997e5ad5c72a39268c6793c6b1180 (patch)
treecb00b11e8293502fcd15597a48e4843a7217fe21
parent14d2a90db984c1a0360727c4d9b8337a689fccec (diff)
parent07e538d58978e29556c77e1e7bccb18c6d0af60b (diff)
downloadrneovim-681ee8131c1997e5ad5c72a39268c6793c6b1180.tar.gz
rneovim-681ee8131c1997e5ad5c72a39268c6793c6b1180.tar.bz2
rneovim-681ee8131c1997e5ad5c72a39268c6793c6b1180.zip
Merge pull request #2910 from blueyed/python-fix-path_hook
Python: fixes for sys.path_hooks handler
-rw-r--r--runtime/autoload/provider/script_host.py25
1 files changed, 16 insertions, 9 deletions
diff --git a/runtime/autoload/provider/script_host.py b/runtime/autoload/provider/script_host.py
index 0a7eb53a0e..96d70e0330 100644
--- a/runtime/autoload/provider/script_host.py
+++ b/runtime/autoload/provider/script_host.py
@@ -17,6 +17,9 @@ IS_PYTHON3 = sys.version_info >= (3, 0)
if IS_PYTHON3:
basestring = str
+ if sys.version_info >= (3, 4):
+ from importlib.machinery import PathFinder
+
@neovim.plugin
class ScriptHost(object):
@@ -190,31 +193,35 @@ def path_hook(nvim):
name = oldtail[:idx]
tail = oldtail[idx+1:]
fmr = imp.find_module(name, path)
- module = imp.load_module(fullname[:-len(oldtail)] + name, *fmr)
+ module = imp.find_module(fullname[:-len(oldtail)] + name, *fmr)
return _find_module(fullname, tail, module.__path__)
else:
- fmr = imp.find_module(fullname, path)
- return imp.load_module(fullname, *fmr)
+ return imp.find_module(fullname, path)
class VimModuleLoader(object):
def __init__(self, module):
self.module = module
def load_module(self, fullname, path=None):
- return self.module
+ # Check sys.modules, required for reload (see PEP302).
+ if fullname in sys.modules:
+ return sys.modules[fullname]
+ return imp.load_module(fullname, *self.module)
class VimPathFinder(object):
- @classmethod
- def find_module(cls, fullname, path=None):
+ @staticmethod
+ def find_module(fullname, path=None):
+ "Method for Python 2.7 and 3.3."
try:
return VimModuleLoader(
_find_module(fullname, fullname, path or _get_paths()))
except ImportError:
return None
- @classmethod
- def load_module(cls, fullname, path=None):
- return _find_module(fullname, fullname, path or _get_paths())
+ @staticmethod
+ def find_spec(fullname, path=None, target=None):
+ "Method for Python 3.4+."
+ return PathFinder.find_spec(fullname, path or _get_paths(), target)
def hook(path):
if path == nvim.VIM_SPECIAL_PATH: