Skip to content

Commit 0cf2c72

Browse files
committed
fix(api-core): resolve ruff lint, mypy type annotations, and 100% test coverage in rest_helpers
1 parent c5c6806 commit 0cf2c72

2 files changed

Lines changed: 37 additions & 13 deletions

File tree

packages/google-api-core/google/api_core/rest_helpers.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import functools
1818
import operator
19-
from typing import Any, Dict, List, Optional, Tuple
19+
from typing import Any, Dict, List, Optional, Set, Tuple
2020

2121
from google.api_core import path_template
2222
from google.protobuf import json_format
@@ -161,23 +161,29 @@ def transcode_request(
161161
if required_fields_default_values:
162162
matched_option = None
163163
for option in http_options:
164-
if option.get("method", "").lower() == transcoded_request.get("method", "").lower():
165-
if path_template.validate(option.get("uri", ""), transcoded_request.get("uri", "")):
164+
if (
165+
option.get("method", "").lower()
166+
== transcoded_request.get("method", "").lower()
167+
):
168+
if path_template.validate(
169+
option.get("uri", ""), transcoded_request.get("uri", "")
170+
):
166171
matched_option = option
167172
break
168173

169-
bound_fields = set()
174+
bound_fields: Optional[Set[str]] = set()
170175
if matched_option:
171-
uri_template = matched_option.get("uri", "")
172-
for m in path_template._VARIABLE_RE.finditer(uri_template):
173-
name = m.group("name")
174-
if name:
175-
bound_fields.add(name.split(".")[0])
176176
body_param = matched_option.get("body")
177-
if body_param:
178-
if body_param == "*":
179-
bound_fields = None
180-
else:
177+
if body_param == "*":
178+
bound_fields = None
179+
else:
180+
assert bound_fields is not None
181+
uri_template = matched_option.get("uri", "")
182+
for m in path_template._VARIABLE_RE.finditer(uri_template):
183+
name = m.group("name")
184+
if name:
185+
bound_fields.add(name.split(".")[0])
186+
if body_param:
181187
bound_fields.add(body_param.split(".")[0])
182188

183189
if bound_fields is not None:

packages/google-api-core/tests/unit/test_rest_helpers.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,3 +306,21 @@ def test_transcode_with_required_fields_in_body():
306306
assert body is not None
307307
assert "name" not in query_params
308308
assert query_params == {}
309+
310+
311+
def test_transcode_with_required_fields_in_body_param():
312+
http_options = [{"method": "post", "uri": "/v1/test/{name}", "body": "options"}]
313+
request = descriptor_pb2.FieldDescriptorProto()
314+
request.name = "my-name"
315+
316+
required_defaults = {
317+
"options": "default-options",
318+
"filter": "default-filter",
319+
}
320+
transcoded, body, query_params = transcode_request(
321+
http_options, request, required_fields_default_values=required_defaults
322+
)
323+
324+
assert transcoded["uri"] == "/v1/test/my-name"
325+
assert "options" not in query_params
326+
assert query_params["filter"] == "default-filter"

0 commit comments

Comments
 (0)