From 9c40c75136a8f57038257d585e06b6487575bb9e Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 31 May 2019 21:25:39 +0200 Subject: [PATCH] Add file_io for Jedi for listdir --- jedi/_compatibility.py | 15 +------------- jedi/evaluate/__init__.py | 2 +- jedi/evaluate/gradual/typeshed.py | 2 +- jedi/evaluate/imports.py | 2 +- jedi/file_io.py | 33 +++++++++++++++++++++++++++++++ 5 files changed, 37 insertions(+), 17 deletions(-) create mode 100644 jedi/file_io.py diff --git a/jedi/_compatibility.py b/jedi/_compatibility.py index 853dcd39..8664f0d7 100644 --- a/jedi/_compatibility.py +++ b/jedi/_compatibility.py @@ -20,7 +20,7 @@ except ImportError: pass from zipimport import zipimporter -from parso.file_io import KnownContentFileIO +from jedi.file_io import KnownContentFileIO, ZipFileIO is_py3 = sys.version_info[0] >= 3 is_py35 = is_py3 and sys.version_info[1] >= 5 @@ -91,19 +91,6 @@ def find_module_py33(string, path=None, loader=None, full_name=None, is_global_s return _from_loader(loader, string) -class ZipFileIO(KnownContentFileIO): - """For .zip and .egg archives""" - def __init__(self, path, code, zip_path): - super(ZipFileIO, self).__init__(path, code) - self._zip_path = zip_path - - def get_last_modified(self): - try: - return os.path.getmtime(self._zip_path) - except OSError: # Python 3 would probably only need FileNotFoundError - return None - - def _from_loader(loader, string): is_package = loader.is_package(string) try: diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 7e29f910..489fe2a0 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -67,7 +67,7 @@ from functools import partial from parso.python import tree import parso from parso import python_bytes_to_unicode -from parso.file_io import FileIO +from jedi.file_io import FileIO from jedi import debug from jedi import parser_utils diff --git a/jedi/evaluate/gradual/typeshed.py b/jedi/evaluate/gradual/typeshed.py index f069c0c8..ee3a3079 100644 --- a/jedi/evaluate/gradual/typeshed.py +++ b/jedi/evaluate/gradual/typeshed.py @@ -1,7 +1,7 @@ import os import re -from parso.file_io import FileIO +from jedi.file_io import FileIO from jedi._compatibility import FileNotFoundError, cast_path from jedi.parser_utils import get_cached_code_lines from jedi.evaluate.cache import evaluator_function_cache diff --git a/jedi/evaluate/imports.py b/jedi/evaluate/imports.py index d29471be..4c6b9f13 100644 --- a/jedi/evaluate/imports.py +++ b/jedi/evaluate/imports.py @@ -16,7 +16,7 @@ import os from parso.python import tree from parso.tree import search_ancestor from parso import python_bytes_to_unicode -from parso.file_io import KnownContentFileIO +from jedi.file_io import KnownContentFileIO from jedi._compatibility import (FileNotFoundError, ImplicitNSInfo, force_unicode, unicode) diff --git a/jedi/file_io.py b/jedi/file_io.py new file mode 100644 index 00000000..b3c3a39d --- /dev/null +++ b/jedi/file_io.py @@ -0,0 +1,33 @@ +import os + +from parso import file_io + + +class _ListDirMixin(object): + def listdir(self): + directory = self.path + return os.listdir(directory) + + +class ZipFileIO(file_io.KnownContentFileIO): + """For .zip and .egg archives""" + def __init__(self, path, code, zip_path): + super(ZipFileIO, self).__init__(path, code) + self._zip_path = zip_path + + def get_last_modified(self): + try: + return os.path.getmtime(self._zip_path) + except OSError: # Python 3 would probably only need FileNotFoundError + return None + + def listdir(self): + return [] + + +class FileIO(_ListDirMixin, file_io.FileIO): + pass + + +class KnownContentFileIO(file_io.KnownContentFileIO): + pass