Path 1: 1362 calls (0.89)

ImportFrom (1241) Import (121)

'typing' (219) '__future__' (102) 'collections' (76) 'missing' (55) 'unknown' (41) 'enum' (40) 'dataclasses' (40) 'abc' (36) 'functools' (26) 'sys' (2...

'typing' (219) '__future__' (102) 'collections' (76) 'missing' (55) 'unknown' (41) 'enum' (40) 'dataclasses' (40) 'abc' (36) 'functools' (26) 'sys' (2...

1def get_import_name(importnode: ImportNode, modname: str | None) -> str | None:
2    """Get a prepared module name from the given import node.
3
4    In the case of relative imports, this will return the
5    absolute qualified module name, which might be useful
6    for debugging. Otherwise, the initial module name
7    is returned unchanged.
8
9    :param importnode: node representing import statement.
10    :param modname: module name from import statement.
11    :returns: absolute qualified module name of the module
12        used in import.
13    """
14    if isinstance(importnode, nodes.ImportFrom) and importnode.level:
15        root = importnode.root()
16        if isinstance(root, nodes.Module):
17            try:
18                return root.relative_to_absolute_name(modname, level=importnode.level)  # type: ignore[no-any-return]
19            except TooManyLevelsError:
20                return modname
21    return modname
            

Path 2: 158 calls (0.1)

ImportFrom (158)

'' (59) 'foo.bar' (9) 'thing2' (8) 'a' (7) 'optparse' (6) 'd' (6) 'thing1' (4) 'all_the_things' (4) 'b' (4) 'no_self_argument' (4)

'input' (22) 'functional.i' (14) 'functional.w' (10) 'input.func_w0401_package.thing2' (8) 'deprecated_relative_import.optparse' (6) 'functional.foo.b...

1def get_import_name(importnode: ImportNode, modname: str | None) -> str | None:
2    """Get a prepared module name from the given import node.
3
4    In the case of relative imports, this will return the
5    absolute qualified module name, which might be useful
6    for debugging. Otherwise, the initial module name
7    is returned unchanged.
8
9    :param importnode: node representing import statement.
10    :param modname: module name from import statement.
11    :returns: absolute qualified module name of the module
12        used in import.
13    """
14    if isinstance(importnode, nodes.ImportFrom) and importnode.level:
15        root = importnode.root()
16        if isinstance(root, nodes.Module):
17            try:
18                return root.relative_to_absolute_name(modname, level=importnode.level)  # type: ignore[no-any-return]
19            except TooManyLevelsError:
20                return modname
21    return modname
            

Path 3: 8 calls (0.01)

ImportFrom (8)

'other_file' (2) 'parent' (2) 'a' (2) '' (2)

'other_file' (2) 'parent' (2) 'a' (2) '' (2)

TooManyLevelsError (8)

1def get_import_name(importnode: ImportNode, modname: str | None) -> str | None:
2    """Get a prepared module name from the given import node.
3
4    In the case of relative imports, this will return the
5    absolute qualified module name, which might be useful
6    for debugging. Otherwise, the initial module name
7    is returned unchanged.
8
9    :param importnode: node representing import statement.
10    :param modname: module name from import statement.
11    :returns: absolute qualified module name of the module
12        used in import.
13    """
14    if isinstance(importnode, nodes.ImportFrom) and importnode.level:
15        root = importnode.root()
16        if isinstance(root, nodes.Module):
17            try:
18                return root.relative_to_absolute_name(modname, level=importnode.level)  # type: ignore[no-any-return]
19            except TooManyLevelsError:
20                return modname
21    return modname