From 36a14026d811ddc5b746780d9fabcc9488d87515 Mon Sep 17 00:00:00 2001 From: Adam Ehlers Nyholm Thomsen Date: Wed, 15 Apr 2020 06:10:43 +0200 Subject: [PATCH] Fix issue that occurs with naming when proto is double nested (#21) --- betterproto/plugin.py | 10 +++++----- betterproto/tests/nestedtwice.json | 11 +++++++++++ betterproto/tests/nestedtwice.proto | 26 ++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 betterproto/tests/nestedtwice.json create mode 100644 betterproto/tests/nestedtwice.proto diff --git a/betterproto/plugin.py b/betterproto/plugin.py index fcb3927..597bf1a 100755 --- a/betterproto/plugin.py +++ b/betterproto/plugin.py @@ -122,19 +122,19 @@ def get_py_zero(type_num: int) -> str: def traverse(proto_file): - def _traverse(path, items): + def _traverse(path, items, prefix = ''): for i, item in enumerate(items): + # Adjust the name since we flatten the heirarchy. + item.name = next_prefix = prefix + item.name yield item, path + [i] if isinstance(item, DescriptorProto): for enum in item.enum_type: - enum.name = item.name + enum.name + enum.name = next_prefix + enum.name yield enum, path + [i, 4] if item.nested_type: - for n, p in _traverse(path + [i, 3], item.nested_type): - # Adjust the name since we flatten the heirarchy. - n.name = item.name + n.name + for n, p in _traverse(path + [i, 3], item.nested_type, next_prefix): yield n, p return itertools.chain( diff --git a/betterproto/tests/nestedtwice.json b/betterproto/tests/nestedtwice.json new file mode 100644 index 0000000..203a660 --- /dev/null +++ b/betterproto/tests/nestedtwice.json @@ -0,0 +1,11 @@ +{ + "root": { + "name": "double-nested", + "parent": { + "child": [{"foo": "hello"}], + "enumChild": ["A"], + "rootParentChild": [{"a": "hello"}], + "bar": true + } + } +} diff --git a/betterproto/tests/nestedtwice.proto b/betterproto/tests/nestedtwice.proto new file mode 100644 index 0000000..91c8050 --- /dev/null +++ b/betterproto/tests/nestedtwice.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; + +message Test { + message Root { + message Parent { + message RootParentChild { + string a = 1; + } + enum EnumChild{ + A = 0; + B = 1; + } + message Child { + string foo = 1; + } + reserved 1; + repeated Child child = 2; + repeated EnumChild enumChild=3; + repeated RootParentChild rootParentChild=4; + bool bar = 5; + } + string name = 1; + Parent parent = 2; + } + Root root = 1; +}