Skip to content

Commit

Permalink
skip sys.path dirs with perm error
Browse files Browse the repository at this point in the history
  • Loading branch information
Bago Amirbekian committed Dec 1, 2023
1 parent 25586a6 commit cba8071
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
15 changes: 13 additions & 2 deletions rope/contrib/autoimport/sqlite.py
Original file line number Diff line number Diff line change
Expand Up @@ -546,13 +546,24 @@ def filter_folders(folder: Path) -> bool:
folder_paths = filter(filter_folders, folder_paths) # type:ignore
return list(OrderedDict.fromkeys(folder_paths))

def _safe_iterdir(self, folder: Path):
print(type(folder))
dirs = folder.iterdir()
while True:
try:
yield next(dirs)
except PermissionError:
pass
except StopIteration:
break

def _get_available_packages(self) -> List[Package]:
packages: List[Package] = [
Package(module, Source.BUILTIN, None, PackageType.BUILTIN)
for module in sys.builtin_module_names
]
for folder in self._get_python_folders():
for package in folder.iterdir():
for package in self._safe_iterdir(folder):
package_tuple = get_package_tuple(package, self.project)
if package_tuple is None:
continue
Expand Down Expand Up @@ -602,7 +613,7 @@ def _find_package_path(self, target_name: str) -> Optional[Package]:
if target_name in sys.builtin_module_names:
return Package(target_name, Source.BUILTIN, None, PackageType.BUILTIN)
for folder in self._get_python_folders():
for package in folder.iterdir():
for package in self._safe_iterdir(folder):
package_tuple = get_package_tuple(package, self.project)
if package_tuple is None:
continue
Expand Down
16 changes: 16 additions & 0 deletions ropetest/contrib/autoimporttest.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,22 @@ def test_generate_full_cache(self):
for table in self.importer._dump_all():
self.assertTrue(len(table) > 0)

def test_generate_full_cache(self):
"""The single thread test takes much longer than the multithread test but is easier to debug"""
single_thread = False
self.importer.generate_modules_cache(single_thread=single_thread)
"""
Create a temporary directory and set permissions to 000
"""
import tempfile, sys
with tempfile.TemporaryDirectory() as dir:
import os
os.chmod(dir, 0)
sys.path.append(dir)
self.importer.generate_modules_cache(single_thread=single_thread)
self.assertIn(("from typing import Dict", "Dict"), self.importer.search("Dict"))
self.assertTrue(len(self.importer._dump_all()) > 0)


class AutoImportObservingTest(unittest.TestCase):
def setUp(self):
Expand Down

0 comments on commit cba8071

Please sign in to comment.