diff --git a/betterproto/compile/importing.py b/betterproto/compile/importing.py index 7fbf317..40441f8 100644 --- a/betterproto/compile/importing.py +++ b/betterproto/compile/importing.py @@ -121,18 +121,20 @@ def reference_ancestor( """ Returns a reference to a python type in a package which is an ancestor to the current package, and adds the required import that is aliased (if possible) to avoid name conflicts. + + Adds trailing __ to avoid name mangling (python.org/dev/peps/pep-0008/#id34). """ distance_up = len(current_package) - len(py_package) if py_package: string_import = py_package[-1] - # Add trailing __ to avoid name mangling (python.org/dev/peps/pep-0008/#id34) 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 + string_alias = f"{'_' * distance_up}{py_type}__" + imports.add(f"from .{'.' * distance_up} import {py_type} as {string_alias}") + return string_alias def reference_cousin( diff --git a/betterproto/tests/test_get_ref_type.py b/betterproto/tests/test_get_ref_type.py index 5cb5f74..2bedf76 100644 --- a/betterproto/tests/test_get_ref_type.py +++ b/betterproto/tests/test_get_ref_type.py @@ -214,8 +214,8 @@ def test_reference_root_package_from_child(): package="package.child", imports=imports, source_type="Message" ) - assert imports == {"from ... import Message"} - assert name == "Message" + assert imports == {"from ... import Message as __Message__"} + assert name == "__Message__" def test_reference_root_package_from_deeply_nested_child(): @@ -224,8 +224,8 @@ def test_reference_root_package_from_deeply_nested_child(): package="package.deeply.nested.child", imports=imports, source_type="Message" ) - assert imports == {"from ..... import Message"} - assert name == "Message" + assert imports == {"from ..... import Message as ____Message__"} + assert name == "____Message__" def test_reference_unrelated_package():