(file: Path, current_module: str)
| 33 | |
| 34 | |
| 35 | def extract_imports(file: Path, current_module: str) -> set[str]: |
| 36 | source = file.read_text(encoding="utf-8") |
| 37 | tree = ast.parse(source, filename=str(file)) |
| 38 | imports: set[str] = set() |
| 39 | |
| 40 | for node in ast.walk(tree): |
| 41 | if isinstance(node, ast.Import): |
| 42 | for alias in node.names: |
| 43 | imports.add(alias.name) |
| 44 | elif isinstance(node, ast.ImportFrom): |
| 45 | if node.level and current_module: |
| 46 | resolved = resolve_relative_import(current_module, node.module, node.level) |
| 47 | if resolved: |
| 48 | imports.add(resolved) |
| 49 | elif node.module: |
| 50 | imports.add(node.module) |
| 51 | |
| 52 | return imports |
| 53 | |
| 54 | |
| 55 | def internal_edges(root: Path) -> dict[str, set[str]]: |
no test coverage detected