Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/jedi/file_io.py: 44%
54 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-20 06:09 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-20 06:09 +0000
1import os
3from parso import file_io
6class AbstractFolderIO:
7 def __init__(self, path):
8 self.path = path
10 def get_base_name(self):
11 raise NotImplementedError
13 def list(self):
14 raise NotImplementedError
16 def get_file_io(self, name):
17 raise NotImplementedError
19 def get_parent_folder(self):
20 raise NotImplementedError
22 def __repr__(self):
23 return '<%s: %s>' % (self.__class__.__name__, self.path)
26class FolderIO(AbstractFolderIO):
27 def get_base_name(self):
28 return os.path.basename(self.path)
30 def list(self):
31 return os.listdir(self.path)
33 def get_file_io(self, name):
34 return FileIO(os.path.join(self.path, name))
36 def get_parent_folder(self):
37 return FolderIO(os.path.dirname(self.path))
39 def walk(self):
40 for root, dirs, files in os.walk(self.path):
41 root_folder_io = FolderIO(root)
42 original_folder_ios = [FolderIO(os.path.join(root, d)) for d in dirs]
43 modified_folder_ios = list(original_folder_ios)
44 yield (
45 root_folder_io,
46 modified_folder_ios,
47 [FileIO(os.path.join(root, f)) for f in files],
48 )
49 modified_iterator = iter(reversed(modified_folder_ios))
50 current = next(modified_iterator, None)
51 i = len(original_folder_ios)
52 for folder_io in reversed(original_folder_ios):
53 i -= 1 # Basically enumerate but reversed
54 if current is folder_io:
55 current = next(modified_iterator, None)
56 else:
57 del dirs[i]
60class FileIOFolderMixin:
61 def get_parent_folder(self):
62 return FolderIO(os.path.dirname(self.path))
65class ZipFileIO(file_io.KnownContentFileIO, FileIOFolderMixin):
66 """For .zip and .egg archives"""
67 def __init__(self, path, code, zip_path):
68 super().__init__(path, code)
69 self._zip_path = zip_path
71 def get_last_modified(self):
72 try:
73 return os.path.getmtime(self._zip_path)
74 except (FileNotFoundError, PermissionError, NotADirectoryError):
75 return None
78class FileIO(file_io.FileIO, FileIOFolderMixin):
79 pass
82class KnownContentFileIO(file_io.KnownContentFileIO, FileIOFolderMixin):
83 pass