Add import aliases to ancestor imports

This commit is contained in:
boukeversteegh 2020-06-09 22:27:26 +02:00
parent 8567892352
commit 76db2f153e
2 changed files with 25 additions and 6 deletions

View File

@ -127,8 +127,15 @@ def import_ancestor(current_package, imports, py_package, py_type):
name = Bar name = Bar
""" """
distance_up = len(current_package) - len(py_package) distance_up = len(current_package) - len(py_package)
imports.add(f"from .{'.' * distance_up} import {py_type}") if py_package:
return py_type string_import = py_package[-1]
string_alias = f"__{'_' * distance_up}{string_import}"
string_from = f"..{'.' * distance_up}"
imports.add(f"from {string_from} import {string_import} as {string_alias}")
return f"{string_alias}.{py_type}"
else:
imports.add(f"from .{'.' * distance_up} import {py_type}")
return py_type
def import_cousin(current_package, imports, py_package, py_type): def import_cousin(current_package, imports, py_package, py_type):

View File

@ -174,8 +174,8 @@ def test_import_parent_package_from_child():
package="package.child", imports=imports, source_type="package.Message" package="package.child", imports=imports, source_type="package.Message"
) )
assert imports == {"from .. import Message"} assert imports == {"from ... import package as ___package"}
assert name == "Message" assert name == "___package.Message"
def test_import_parent_package_from_deeply_nested_child(): def test_import_parent_package_from_deeply_nested_child():
@ -186,8 +186,20 @@ def test_import_parent_package_from_deeply_nested_child():
source_type="package.deeply.nested.Message", source_type="package.deeply.nested.Message",
) )
assert imports == {"from .. import Message"} assert imports == {"from ... import nested as ___nested"}
assert name == "Message" assert name == "___nested.Message"
def test_import_ancestor_package_from_nested_child():
imports = set()
name = get_ref_type(
package="package.ancestor.nested.child",
imports=imports,
source_type="package.ancestor.Message",
)
assert imports == {"from .... import ancestor as ____ancestor"}
assert name == "____ancestor.Message"
def test_import_root_package_from_child(): def test_import_root_package_from_child():