Skip to content

Commit 2e0c3f3

Browse files
[bugfix] Fix dotted fields in method signatures. (#70)
1 parent f921998 commit 2e0c3f3

2 files changed

Lines changed: 31 additions & 2 deletions

File tree

packages/gapic-generator/gapic/schema/wrappers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ def signatures(self) -> Tuple[signature_pb2.MethodSignature]:
454454
answer.append(MethodSignature(
455455
name=sig.function_name if sig.function_name else self.name,
456456
fields=collections.OrderedDict([
457-
(f.split('.')[-1], self.input.get_field(f))
457+
(f.split('.')[-1], self.input.get_field(*f.split('.')))
458458
for f in sig.fields
459459
]),
460460
))

packages/gapic-generator/tests/unit/schema/wrappers/test_method.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,32 @@ def test_method_signature():
5757
assert tuple(signature.fields.keys()) == ('int_field', 'float_field')
5858

5959

60+
def test_method_signature_nested():
61+
# Set up a meaningful input message.
62+
inner_msg = make_message(name='Inner', fields=(
63+
make_field('int_field', type=5),
64+
make_field('bool_field', type=8),
65+
make_field('float_field', type=2),
66+
))
67+
outer_msg = make_message(name='Outer', fields=(
68+
make_field('inner', type=9, message=inner_msg),
69+
))
70+
71+
# Create the method.
72+
method = make_method('SendStuff', input_message=outer_msg)
73+
74+
# Edit the underlying method pb2 post-hoc to add the appropriate annotation
75+
# (google.api.signature).
76+
method.options.Extensions[annotations_pb2.method_signature].MergeFrom(
77+
signature_pb2.MethodSignature(fields=['inner.int_field'])
78+
)
79+
80+
# We should get back just those two fields as part of the signature.
81+
assert len(method.signatures) == 1
82+
signature = method.signatures[0]
83+
assert tuple(signature.fields.keys()) == ('int_field',)
84+
85+
6086
def test_method_no_signature():
6187
assert len(make_method('Ping').signatures) == 0
6288

@@ -149,13 +175,16 @@ def make_message(name: str, package: str = 'foo.bar.v1', module: str = 'baz',
149175

150176

151177
def make_field(name: str, repeated: bool = False,
152-
meta: metadata.Metadata = None, **kwargs) -> wrappers.Method:
178+
meta: metadata.Metadata = None,
179+
message: wrappers.MessageType = None,
180+
**kwargs) -> wrappers.Method:
153181
field_pb = descriptor_pb2.FieldDescriptorProto(
154182
name=name,
155183
label=3 if repeated else 1,
156184
**kwargs
157185
)
158186
return wrappers.Field(
159187
field_pb=field_pb,
188+
message=message,
160189
meta=meta or metadata.Metadata(),
161190
)

0 commit comments

Comments
 (0)