diff --git a/betterproto/compile/importing.py b/betterproto/compile/importing.py index aaf4a16..cdef91f 100644 --- a/betterproto/compile/importing.py +++ b/betterproto/compile/importing.py @@ -127,8 +127,15 @@ def import_ancestor(current_package, imports, py_package, py_type): name = Bar """ distance_up = len(current_package) - len(py_package) - imports.add(f"from .{'.' * distance_up} import {py_type}") - return py_type + if py_package: + 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): diff --git a/betterproto/tests/test_get_ref_type.py b/betterproto/tests/test_get_ref_type.py index b02dfea..a2d089d 100644 --- a/betterproto/tests/test_get_ref_type.py +++ b/betterproto/tests/test_get_ref_type.py @@ -174,8 +174,8 @@ def test_import_parent_package_from_child(): package="package.child", imports=imports, source_type="package.Message" ) - assert imports == {"from .. import Message"} - assert name == "Message" + assert imports == {"from ... import package as ___package"} + assert name == "___package.Message" 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", ) - assert imports == {"from .. import Message"} - assert name == "Message" + assert imports == {"from ... import nested as ___nested"} + 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():