Skip to content

Commit 738b02d

Browse files
authored
Numerous small cleanups (#328)
Add paginated result to a method's refererred to types Remove empty request construction for cross package requests with no flattened fields
1 parent 6eb7e15 commit 738b02d

4 files changed

Lines changed: 45 additions & 4 deletions

File tree

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,11 @@ def _ref_types(self, use_legacy: bool = False) -> Sequence[Union[MessageType, En
653653
answer.append(self.lro.response_type)
654654
answer.append(self.lro.metadata_type)
655655

656+
# If this message paginates its responses, it is possible
657+
# that the individual result messages reside in a different module.
658+
if self.paged_result_field:
659+
answer.append(self.paged_result_field.message)
660+
656661
# Done; return the answer.
657662
return tuple(answer)
658663

packages/gapic-generator/gapic/templates/%namespace/%name_%version/%sub/services/%service/client.py.j2

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,16 +195,18 @@ class {{ service.client_name }}(metaclass={{ service.client_name }}Meta):
195195
# so it must be constructed via keyword expansion.
196196
if isinstance(request, dict):
197197
request = {{ method.input.ident }}(**request)
198+
{% if method.flattened_fields -%}{# Cross-package req and flattened fields #}
198199
elif not request:
199200
request = {{ method.input.ident }}()
201+
{% endif -%}{# Cross-package req and flattened fields #}
200202
{%- else %}
201203
request = {{ method.input.ident }}(request)
202204
{% endif %} {# different request package #}
203205

204-
# If we have keyword arguments corresponding to fields on the
205-
# request, apply these.
206206
{#- Vanilla python protobuf wrapper types cannot _set_ repeated fields #}
207207
{%- for key, field in method.flattened_fields.items() if not(field.repeated and method.input.ident.package != method.ident.package) %}
208+
# If we have keyword arguments corresponding to fields on the
209+
# request, apply these.
208210
if {{ field.name }} is not None:
209211
request.{{ key }} = {{ field.name }}
210212
{%- endfor %}

packages/gapic-generator/gapic/templates/tests/unit/%name_%version/%sub/test_%service.py.j2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,8 @@ def test_{{ method.name|snake_case }}_pager():
294294
request={},
295295
)]
296296
assert len(results) == 6
297-
assert all([isinstance(i, {{ method.paged_result_field.message.ident }})
298-
for i in results])
297+
assert all(isinstance(i, {{ method.paged_result_field.message.ident }})
298+
for i in results)
299299

300300
def test_{{ method.name|snake_case }}_pages():
301301
client = {{ service.client_name }}(

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,40 @@ def test_method_paged_result_field_no_page_field():
113113
assert method.paged_result_field is None
114114

115115

116+
def test_method_paged_result_ref_types():
117+
input_msg = make_message(
118+
name='ListSquidsRequest',
119+
fields=(
120+
make_field(name='parent', type=9), # str
121+
make_field(name='page_size', type=5), # int
122+
make_field(name='page_token', type=9), # str
123+
),
124+
module='squid',
125+
)
126+
mollusc_msg = make_message('Mollusc', module='mollusc')
127+
output_msg = make_message(
128+
name='ListMolluscsResponse',
129+
fields=(
130+
make_field(name='molluscs', message=mollusc_msg, repeated=True),
131+
make_field(name='next_page_token', type=9)
132+
),
133+
module='mollusc'
134+
)
135+
method = make_method(
136+
'ListSquids',
137+
input_message=input_msg,
138+
output_message=output_msg,
139+
module='squid'
140+
)
141+
142+
ref_type_names = {t.name for t in method.ref_types}
143+
assert ref_type_names == {
144+
'ListSquidsRequest',
145+
'ListSquidsPager',
146+
'Mollusc',
147+
}
148+
149+
116150
def test_method_field_headers_none():
117151
method = make_method('DoSomething')
118152
assert isinstance(method.field_headers, collections.abc.Sequence)

0 commit comments

Comments
 (0)