Skip to content

Commit e83fbcc

Browse files
committed
Handle include_external_packages=None
1 parent 1f5f742 commit e83fbcc

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

src/grimp/application/usecases.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import joblib # type: ignore
99

10-
from .ports.filesystem import BasicFileSystem
1110
from ..application.ports import caching
1211
from ..application.ports.filesystem import AbstractFileSystem
1312
from ..application.ports.graph import ImportGraph
@@ -60,7 +59,6 @@ def build_graph(
6059
"mypackage", "anotherpackage", "onemore", include_external_packages=True,
6160
)
6261
"""
63-
6462
file_system: AbstractFileSystem = settings.FILE_SYSTEM
6563

6664
found_packages = _find_packages(
@@ -265,7 +263,9 @@ def _scan_chunk(
265263
import_scanner: AbstractImportScanner = settings.IMPORT_SCANNER_CLASS(
266264
file_system=basic_file_system,
267265
found_packages=found_packages,
268-
include_external_packages=include_external_packages,
266+
# Ensure that the passed exclude_type_checking_imports is definitely a boolean,
267+
# otherwise the Rust class will error.
268+
include_external_packages=bool(include_external_packages),
269269
)
270270
return {
271271
module_file: import_scanner.scan_for_imports(
@@ -283,7 +283,9 @@ def _scan_chunks(
283283
) -> Dict[ModuleFile, Set[DirectImport]]:
284284
number_of_processes = len(chunks)
285285
import_scanning_jobs = joblib.Parallel(n_jobs=number_of_processes)(
286-
joblib.delayed(_scan_chunk)(found_packages, include_external_packages, exclude_type_checking_imports, chunk)
286+
joblib.delayed(_scan_chunk)(
287+
found_packages, include_external_packages, exclude_type_checking_imports, chunk
288+
)
287289
for chunk in chunks
288290
)
289291

tests/unit/application/test_usecases.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,3 +208,37 @@ class FakeModuleFinder(BaseFakeModuleFinder):
208208
[call] = mock_scan_chunks.call_args_list
209209
chunks = call.args[0]
210210
assert len(chunks) == expected_number_of_chunks
211+
212+
def test_forgives_wrong_type_being_passed_to_include_external_packages(self):
213+
file_system = FakeFileSystem(
214+
contents="""
215+
/path/to/mypackage/
216+
__init__.py
217+
foo/
218+
__init__.py
219+
one.py
220+
""",
221+
content_map={
222+
"/path/to/mypackage/foo/one.py": (
223+
"import mypackage.foo.two.green\nfrom .. import Something"
224+
),
225+
},
226+
)
227+
228+
class FakePackageFinder(BaseFakePackageFinder):
229+
directory_map = {"mypackage": "/path/to/mypackage"}
230+
231+
with override_settings(FILE_SYSTEM=file_system, PACKAGE_FINDER=FakePackageFinder()):
232+
graph = usecases.build_graph(
233+
"mypackage",
234+
# Note: this should be a bool, but we want to tolerate it,
235+
# as Import Linter currently has a bug where it will pass it as None.
236+
include_external_packages=None,
237+
)
238+
239+
expected_modules = {
240+
"mypackage",
241+
"mypackage.foo",
242+
"mypackage.foo.one",
243+
}
244+
assert expected_modules == graph.modules

0 commit comments

Comments
 (0)