From 9e9c62a5ab4df54785207321d376acea2b5aa6ab Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 5 Mar 2018 10:55:21 +0100 Subject: [PATCH] Get rid of the imp library import in Python3 to avoid warnings, fixes #1001 --- jedi/_compatibility.py | 14 +++++++++++++- jedi/evaluate/compiled/subprocess/functions.py | 6 +++--- jedi/evaluate/context/module.py | 5 ++--- jedi/evaluate/sys_path.py | 5 ++--- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/jedi/_compatibility.py b/jedi/_compatibility.py index 73a981a1..387e4b18 100644 --- a/jedi/_compatibility.py +++ b/jedi/_compatibility.py @@ -3,7 +3,6 @@ To ensure compatibility from Python ``2.7`` - ``3.x``, a module has been created. Clearly there is huge need to use conforming syntax. """ import sys -import imp import os import re import pkgutil @@ -108,6 +107,9 @@ def find_module_py33(string, path=None, loader=None, full_name=None): def find_module_pre_py33(string, path=None, full_name=None): + # This import is here, because in other places it will raise a + # DeprecationWarning. + import imp try: module_file, module_path, description = imp.find_module(string, path) module_type = description[2] @@ -217,6 +219,16 @@ class ImplicitNSInfo(object): self.name = name self.paths = paths + +if is_py3: + all_suffixes = importlib.machinery.all_suffixes +else: + def all_suffixes(): + # Is deprecated and raises a warning in Python 3.6. + import imp + return [suffix for suffix, _, _ in imp.get_suffixes()] + + # unicode function try: unicode = unicode diff --git a/jedi/evaluate/compiled/subprocess/functions.py b/jedi/evaluate/compiled/subprocess/functions.py index 4e348dd3..a78719fe 100644 --- a/jedi/evaluate/compiled/subprocess/functions.py +++ b/jedi/evaluate/compiled/subprocess/functions.py @@ -1,8 +1,8 @@ import sys import os -import imp -from jedi._compatibility import find_module, cast_path, force_unicode, iter_modules +from jedi._compatibility import find_module, cast_path, force_unicode, \ + iter_modules, all_suffixes from jedi.evaluate.compiled import access from jedi import parser_utils @@ -90,7 +90,7 @@ def _get_init_path(directory_path): The __init__ file can be searched in a directory. If found return it, else None. """ - for suffix, _, _ in imp.get_suffixes(): + for suffix in all_suffixes(): path = os.path.join(directory_path, '__init__' + suffix) if os.path.exists(path): return path diff --git a/jedi/evaluate/context/module.py b/jedi/evaluate/context/module.py index 4350dc89..4c94b1d3 100644 --- a/jedi/evaluate/context/module.py +++ b/jedi/evaluate/context/module.py @@ -1,11 +1,10 @@ -import imp import re import os from parso import python_bytes_to_unicode from jedi.evaluate.cache import evaluator_method_cache -from jedi._compatibility import iter_modules +from jedi._compatibility import iter_modules, all_suffixes from jedi.evaluate.filters import GlobalNameFilter, ContextNameMixin, \ AbstractNameDefinition, ParserTreeFilter, DictFilter, MergedFilter from jedi.evaluate import compiled @@ -107,7 +106,7 @@ class ModuleContext(TreeContext): :return: The path to the directory of a package. None in case it's not a package. """ - for suffix, _, _ in imp.get_suffixes(): + for suffix in all_suffixes(): ending = '__init__' + suffix py__file__ = self.py__file__() if py__file__ is not None and py__file__.endswith(ending): diff --git a/jedi/evaluate/sys_path.py b/jedi/evaluate/sys_path.py index 60d42119..7fa9beef 100644 --- a/jedi/evaluate/sys_path.py +++ b/jedi/evaluate/sys_path.py @@ -1,7 +1,6 @@ import os -import imp -from jedi._compatibility import unicode, force_unicode +from jedi._compatibility import unicode, force_unicode, all_suffixes from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.base_context import ContextualizedNode from jedi.evaluate.helpers import is_string @@ -198,7 +197,7 @@ def dotted_path_in_sys_path(sys_path, module_path): Returns the dotted path inside a sys.path. """ # First remove the suffix. - for suffix, _, _ in imp.get_suffixes(): + for suffix in all_suffixes(): if module_path.endswith(suffix): module_path = module_path[:-len(suffix)] break