Skip to content

Commit d138a88

Browse files
committed
Fix message/field name aliasing
Fixes #108
1 parent 557b4dd commit d138a88

13 files changed

+91
-51
lines changed

proto/test/proto/test3.proto

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ message OuterMessage3 {
1515
message SimpleProto3 {
1616
string a_string = 1;
1717
repeated string a_repeated_string = 2;
18-
OuterEnum outer_enum = 3;
18+
OuterEnum a_outer_enum = 3;
1919
OuterMessage3 outer_message = 4;
2020

2121
oneof a_oneof {
@@ -29,4 +29,8 @@ message SimpleProto3 {
2929
}
3030

3131
OuterMessage3 bool = 9;
32+
33+
// Test having fieldname match messagename
34+
OuterEnum OuterEnum = 10;
35+
OuterMessage3 OuterMessage3 = 11;
3236
}

python/mypy_protobuf.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def _import_message(self, name):
139139

140140
# Message defined in this file.
141141
if message_fd.name == self.fd.name:
142-
return name
142+
return self._mangle_global(name)
143143

144144
# Not in file. Must import
145145
# Python generated code ignores proto packages, so the only relevant factor is
@@ -166,6 +166,11 @@ def _mangle_builtin(name):
166166
# type: (Text) -> Text
167167
return 'builtin___{}'.format(name)
168168

169+
@staticmethod
170+
def _mangle_global(name):
171+
# type: (Text) -> Text
172+
return 'global___{}'.format(name)
173+
169174
@contextmanager
170175
def _indent(self):
171176
# type: () -> Generator
@@ -220,6 +225,7 @@ def write_enums(self, enums, prefix=''):
220225
self.write_enum_values(enum, enum_full_name)
221226

222227
self.write_enum_values(enum, enum_full_name)
228+
l("{} = {}", self._mangle_global(enum.name), enum.name)
223229
l("")
224230

225231
def write_messages(self, messages, prefix):
@@ -302,6 +308,7 @@ def write_messages(self, messages, prefix):
302308

303309
self.write_stringly_typed_fields(desc)
304310

311+
l("{} = {}", self._mangle_global(desc.name), desc.name)
305312
l("")
306313

307314
def write_stringly_typed_fields(self, desc):

test/proto/Capitalized/Capitalized_pb2.pyi.expected

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,17 @@ class lower(google___protobuf___message___Message):
4444
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
4545
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
4646
def ClearField(self, field_name: typing_extensions___Literal[u"a",b"a"]) -> None: ...
47+
global___lower = lower
4748

4849
class Upper(google___protobuf___message___Message):
4950
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
5051

5152
@property
52-
def Lower(self) -> lower: ...
53+
def Lower(self) -> global___lower: ...
5354

5455
def __init__(self,
5556
*,
56-
Lower : typing___Optional[lower] = None,
57+
Lower : typing___Optional[global___lower] = None,
5758
) -> None: ...
5859
if sys.version_info >= (3,):
5960
@classmethod
@@ -65,16 +66,17 @@ class Upper(google___protobuf___message___Message):
6566
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
6667
def HasField(self, field_name: typing_extensions___Literal[u"Lower",b"Lower"]) -> builtin___bool: ...
6768
def ClearField(self, field_name: typing_extensions___Literal[u"Lower",b"Lower"]) -> None: ...
69+
global___Upper = Upper
6870

6971
class lower2(google___protobuf___message___Message):
7072
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
7173

7274
@property
73-
def upper(self) -> Upper: ...
75+
def upper(self) -> global___Upper: ...
7476

7577
def __init__(self,
7678
*,
77-
upper : typing___Optional[Upper] = None,
79+
upper : typing___Optional[global___Upper] = None,
7880
) -> None: ...
7981
if sys.version_info >= (3,):
8082
@classmethod
@@ -86,3 +88,4 @@ class lower2(google___protobuf___message___Message):
8688
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
8789
def HasField(self, field_name: typing_extensions___Literal[u"upper",b"upper"]) -> builtin___bool: ...
8890
def ClearField(self, field_name: typing_extensions___Literal[u"upper",b"upper"]) -> None: ...
91+
global___lower2 = lower2

test/proto/dot/com/test_pb2.pyi.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,4 @@ class TestMessage(google___protobuf___message___Message):
4545
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
4646
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
4747
def ClearField(self, field_name: typing_extensions___Literal[u"foo",b"foo"]) -> None: ...
48+
global___TestMessage = TestMessage

test/proto/inner/inner_pb2.pyi.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,4 @@ class Inner(google___protobuf___message___Message):
4848
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
4949
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
5050
def ClearField(self, field_name: typing_extensions___Literal[u"a",b"a"]) -> None: ...
51+
global___Inner = Inner

test/proto/nested/nested_pb2.pyi.expected

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class Nested(google___protobuf___message___Message):
5454
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
5555
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
5656
def ClearField(self, field_name: typing_extensions___Literal[u"a",b"a"]) -> None: ...
57+
global___Nested = Nested
5758

5859
class AnotherNested(google___protobuf___message___Message):
5960
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
@@ -75,6 +76,7 @@ class AnotherNested(google___protobuf___message___Message):
7576
INVALID = typing___cast('AnotherNested.NestedEnum', 0)
7677
ONE = typing___cast('AnotherNested.NestedEnum', 1)
7778
TWO = typing___cast('AnotherNested.NestedEnum', 2)
79+
global___NestedEnum = NestedEnum
7880

7981
class NestedMessage(google___protobuf___message___Message):
8082
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
@@ -96,18 +98,19 @@ class AnotherNested(google___protobuf___message___Message):
9698
UNDEFINED = typing___cast('AnotherNested.NestedMessage.NestedEnum2', 0)
9799
NESTED_ENUM1 = typing___cast('AnotherNested.NestedMessage.NestedEnum2', 1)
98100
NESTED_ENUM2 = typing___cast('AnotherNested.NestedMessage.NestedEnum2', 2)
101+
global___NestedEnum2 = NestedEnum2
99102

100103
s = ... # type: typing___Text
101104
b = ... # type: builtin___bool
102-
ne = ... # type: AnotherNested.NestedEnum
103-
ne2 = ... # type: AnotherNested.NestedMessage.NestedEnum2
105+
ne = ... # type: global___AnotherNested.NestedEnum
106+
ne2 = ... # type: global___AnotherNested.NestedMessage.NestedEnum2
104107

105108
def __init__(self,
106109
*,
107110
s : typing___Optional[typing___Text] = None,
108111
b : typing___Optional[builtin___bool] = None,
109-
ne : typing___Optional[AnotherNested.NestedEnum] = None,
110-
ne2 : typing___Optional[AnotherNested.NestedMessage.NestedEnum2] = None,
112+
ne : typing___Optional[global___AnotherNested.NestedEnum] = None,
113+
ne2 : typing___Optional[global___AnotherNested.NestedMessage.NestedEnum2] = None,
111114
) -> None: ...
112115
if sys.version_info >= (3,):
113116
@classmethod
@@ -118,6 +121,7 @@ class AnotherNested(google___protobuf___message___Message):
118121
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
119122
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
120123
def ClearField(self, field_name: typing_extensions___Literal[u"b",b"b",u"ne",b"ne",u"ne2",b"ne2",u"s",b"s"]) -> None: ...
124+
global___NestedMessage = NestedMessage
121125

122126

123127
def __init__(self,
@@ -130,3 +134,4 @@ class AnotherNested(google___protobuf___message___Message):
130134
def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> AnotherNested: ...
131135
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
132136
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
137+
global___AnotherNested = AnotherNested

test/proto/nopackage_pb2.pyi.expected

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,21 @@ class NoPackage(google___protobuf___message___Message):
4545
def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> NoPackage: ...
4646
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
4747
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
48+
global___NoPackage = NoPackage
4849

4950
class NoPackage2(google___protobuf___message___Message):
5051
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
5152

5253
@property
53-
def np(self) -> NoPackage: ...
54+
def np(self) -> global___NoPackage: ...
5455

5556
@property
56-
def np_rep(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[NoPackage]: ...
57+
def np_rep(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[global___NoPackage]: ...
5758

5859
def __init__(self,
5960
*,
60-
np : typing___Optional[NoPackage] = None,
61-
np_rep : typing___Optional[typing___Iterable[NoPackage]] = None,
61+
np : typing___Optional[global___NoPackage] = None,
62+
np_rep : typing___Optional[typing___Iterable[global___NoPackage]] = None,
6263
) -> None: ...
6364
if sys.version_info >= (3,):
6465
@classmethod
@@ -70,3 +71,4 @@ class NoPackage2(google___protobuf___message___Message):
7071
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
7172
def HasField(self, field_name: typing_extensions___Literal[u"np",b"np"]) -> builtin___bool: ...
7273
def ClearField(self, field_name: typing_extensions___Literal[u"np",b"np",u"np_rep",b"np_rep"]) -> None: ...
74+
global___NoPackage2 = NoPackage2

test/proto/test3_pb2.pyi.expected

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class OuterEnum(builtin___int):
5757
UNKNOWN = typing___cast('OuterEnum', 0)
5858
FOO3 = typing___cast('OuterEnum', 1)
5959
BAR3 = typing___cast('OuterEnum', 2)
60+
global___OuterEnum = OuterEnum
6061

6162
class OuterMessage3(google___protobuf___message___Message):
6263
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
@@ -75,34 +76,41 @@ class OuterMessage3(google___protobuf___message___Message):
7576
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
7677
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
7778
def ClearField(self, field_name: typing_extensions___Literal[u"a_bool",b"a_bool"]) -> None: ...
79+
global___OuterMessage3 = OuterMessage3
7880

7981
class SimpleProto3(google___protobuf___message___Message):
8082
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
8183
a_string = ... # type: typing___Text
8284
a_repeated_string = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
83-
outer_enum = ... # type: OuterEnum
85+
a_outer_enum = ... # type: global___OuterEnum
8486
a_oneof_1 = ... # type: typing___Text
8587
a_oneof_2 = ... # type: typing___Text
8688
b_oneof_1 = ... # type: typing___Text
8789
b_oneof_2 = ... # type: typing___Text
90+
OuterEnum = ... # type: global___OuterEnum
8891

8992
@property
90-
def outer_message(self) -> OuterMessage3: ...
93+
def outer_message(self) -> global___OuterMessage3: ...
9194

9295
@property
93-
def bool(self) -> OuterMessage3: ...
96+
def bool(self) -> global___OuterMessage3: ...
97+
98+
@property
99+
def OuterMessage3(self) -> global___OuterMessage3: ...
94100

95101
def __init__(self,
96102
*,
97103
a_string : typing___Optional[typing___Text] = None,
98104
a_repeated_string : typing___Optional[typing___Iterable[typing___Text]] = None,
99-
outer_enum : typing___Optional[OuterEnum] = None,
100-
outer_message : typing___Optional[OuterMessage3] = None,
105+
a_outer_enum : typing___Optional[global___OuterEnum] = None,
106+
outer_message : typing___Optional[global___OuterMessage3] = None,
101107
a_oneof_1 : typing___Optional[typing___Text] = None,
102108
a_oneof_2 : typing___Optional[typing___Text] = None,
103109
b_oneof_1 : typing___Optional[typing___Text] = None,
104110
b_oneof_2 : typing___Optional[typing___Text] = None,
105-
bool : typing___Optional[OuterMessage3] = None,
111+
bool : typing___Optional[global___OuterMessage3] = None,
112+
OuterEnum : typing___Optional[global___OuterEnum] = None,
113+
OuterMessage3 : typing___Optional[global___OuterMessage3] = None,
106114
) -> None: ...
107115
if sys.version_info >= (3,):
108116
@classmethod
@@ -112,9 +120,10 @@ class SimpleProto3(google___protobuf___message___Message):
112120
def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> SimpleProto3: ...
113121
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
114122
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
115-
def HasField(self, field_name: typing_extensions___Literal[u"a_oneof",b"a_oneof",u"a_oneof_1",b"a_oneof_1",u"a_oneof_2",b"a_oneof_2",u"b_oneof",b"b_oneof",u"b_oneof_1",b"b_oneof_1",u"b_oneof_2",b"b_oneof_2",u"bool",b"bool",u"outer_message",b"outer_message"]) -> builtin___bool: ...
116-
def ClearField(self, field_name: typing_extensions___Literal[u"a_oneof",b"a_oneof",u"a_oneof_1",b"a_oneof_1",u"a_oneof_2",b"a_oneof_2",u"a_repeated_string",b"a_repeated_string",u"a_string",b"a_string",u"b_oneof",b"b_oneof",u"b_oneof_1",b"b_oneof_1",u"b_oneof_2",b"b_oneof_2",u"bool",b"bool",u"outer_enum",b"outer_enum",u"outer_message",b"outer_message"]) -> None: ...
123+
def HasField(self, field_name: typing_extensions___Literal[u"OuterMessage3",b"OuterMessage3",u"a_oneof",b"a_oneof",u"a_oneof_1",b"a_oneof_1",u"a_oneof_2",b"a_oneof_2",u"b_oneof",b"b_oneof",u"b_oneof_1",b"b_oneof_1",u"b_oneof_2",b"b_oneof_2",u"bool",b"bool",u"outer_message",b"outer_message"]) -> builtin___bool: ...
124+
def ClearField(self, field_name: typing_extensions___Literal[u"OuterEnum",b"OuterEnum",u"OuterMessage3",b"OuterMessage3",u"a_oneof",b"a_oneof",u"a_oneof_1",b"a_oneof_1",u"a_oneof_2",b"a_oneof_2",u"a_outer_enum",b"a_outer_enum",u"a_repeated_string",b"a_repeated_string",u"a_string",b"a_string",u"b_oneof",b"b_oneof",u"b_oneof_1",b"b_oneof_1",u"b_oneof_2",b"b_oneof_2",u"bool",b"bool",u"outer_message",b"outer_message"]) -> None: ...
117125
@typing___overload
118126
def WhichOneof(self, oneof_group: typing_extensions___Literal[u"a_oneof",b"a_oneof"]) -> typing_extensions___Literal["a_oneof_1","a_oneof_2"]: ...
119127
@typing___overload
120128
def WhichOneof(self, oneof_group: typing_extensions___Literal[u"b_oneof",b"b_oneof"]) -> typing_extensions___Literal["b_oneof_1","b_oneof_2"]: ...
129+
global___SimpleProto3 = SimpleProto3

test/proto/test_no_generic_services_pb2.pyi.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@ class Simple3(google___protobuf___message___Message):
4646
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
4747
def HasField(self, field_name: typing_extensions___Literal[u"a_string",b"a_string"]) -> builtin___bool: ...
4848
def ClearField(self, field_name: typing_extensions___Literal[u"a_string",b"a_string"]) -> None: ...
49+
global___Simple3 = Simple3

0 commit comments

Comments
 (0)