Skip to content

Commit 3e6b78c

Browse files
committed
refactor(generator): optimize setup_request_id uuid creation and link TODO issue
1 parent 3204cea commit 3e6b78c

9 files changed

Lines changed: 91 additions & 81 deletions

File tree

  • packages/gapic-generator

packages/gapic-generator/gapic/templates/%namespace/%name_%version/%sub/_compat.py.j2

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import uuid
66
try:
77
from google.api_core.gapic_v1.requests import setup_request_id # type: ignore
88
except ImportError: # pragma: NO COVER
9-
# TODO: Remove this fallback when google-api-core >= 2.18.0 is the minimum required version.
9+
# TODO(https://github.com/googleapis/google-cloud-python/issues/17812): Remove this fallback when google-api-core >= 2.26.0 is the minimum required version.
1010
def setup_request_id(request, field_name: str, is_proto3_optional: bool):
1111
"""Populate a UUID4 field in the request if it is not already set.
1212

@@ -15,23 +15,25 @@ except ImportError: # pragma: NO COVER
1515
field_name (str): The name of the field to populate.
1616
is_proto3_optional (bool): Whether the field is proto3 optional.
1717
"""
18+
request_id_val = str(uuid.uuid4())
1819
if isinstance(request, dict):
1920
if is_proto3_optional:
20-
if field_name not in request:
21-
request[field_name] = str(uuid.uuid4())
21+
if field_name not in request or request[field_name] is None:
22+
request[field_name] = request_id_val
2223
elif not request.get(field_name):
23-
request[field_name] = str(uuid.uuid4())
24+
request[field_name] = request_id_val
2425
return
2526

2627
if is_proto3_optional:
2728
try:
2829
# Pure protobuf messages
2930
if not request.HasField(field_name):
30-
setattr(request, field_name, str(uuid.uuid4()))
31+
setattr(request, field_name, request_id_val)
3132
except (AttributeError, ValueError):
3233
# Proto-plus messages or other objects
33-
if field_name not in request:
34-
setattr(request, field_name, str(uuid.uuid4()))
34+
if getattr(request, field_name, None) is None:
35+
setattr(request, field_name, request_id_val)
3536
else:
36-
if not getattr(request, field_name):
37-
setattr(request, field_name, str(uuid.uuid4()))
37+
if not getattr(request, field_name, None):
38+
setattr(request, field_name, request_id_val)
39+

packages/gapic-generator/tests/integration/goldens/asset/google/cloud/asset_v1/_compat.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
try:
2020
from google.api_core.gapic_v1.requests import setup_request_id # type: ignore
2121
except ImportError: # pragma: NO COVER
22-
# TODO: Remove this fallback when google-api-core >= 2.18.0 is the minimum required version.
22+
# TODO(https://github.com/googleapis/google-cloud-python/issues/17812): Remove this fallback when google-api-core >= 2.26.0 is the minimum required version.
2323
def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2424
"""Populate a UUID4 field in the request if it is not already set.
2525
@@ -28,23 +28,24 @@ def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2828
field_name (str): The name of the field to populate.
2929
is_proto3_optional (bool): Whether the field is proto3 optional.
3030
"""
31+
request_id_val = str(uuid.uuid4())
3132
if isinstance(request, dict):
3233
if is_proto3_optional:
33-
if field_name not in request:
34-
request[field_name] = str(uuid.uuid4())
34+
if field_name not in request or request[field_name] is None:
35+
request[field_name] = request_id_val
3536
elif not request.get(field_name):
36-
request[field_name] = str(uuid.uuid4())
37+
request[field_name] = request_id_val
3738
return
3839

3940
if is_proto3_optional:
4041
try:
4142
# Pure protobuf messages
4243
if not request.HasField(field_name):
43-
setattr(request, field_name, str(uuid.uuid4()))
44+
setattr(request, field_name, request_id_val)
4445
except (AttributeError, ValueError):
4546
# Proto-plus messages or other objects
46-
if field_name not in request:
47-
setattr(request, field_name, str(uuid.uuid4()))
47+
if getattr(request, field_name, None) is None:
48+
setattr(request, field_name, request_id_val)
4849
else:
49-
if not getattr(request, field_name):
50-
setattr(request, field_name, str(uuid.uuid4()))
50+
if not getattr(request, field_name, None):
51+
setattr(request, field_name, request_id_val)

packages/gapic-generator/tests/integration/goldens/credentials/google/iam/credentials_v1/_compat.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
try:
2020
from google.api_core.gapic_v1.requests import setup_request_id # type: ignore
2121
except ImportError: # pragma: NO COVER
22-
# TODO: Remove this fallback when google-api-core >= 2.18.0 is the minimum required version.
22+
# TODO(https://github.com/googleapis/google-cloud-python/issues/17812): Remove this fallback when google-api-core >= 2.26.0 is the minimum required version.
2323
def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2424
"""Populate a UUID4 field in the request if it is not already set.
2525
@@ -28,23 +28,24 @@ def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2828
field_name (str): The name of the field to populate.
2929
is_proto3_optional (bool): Whether the field is proto3 optional.
3030
"""
31+
request_id_val = str(uuid.uuid4())
3132
if isinstance(request, dict):
3233
if is_proto3_optional:
33-
if field_name not in request:
34-
request[field_name] = str(uuid.uuid4())
34+
if field_name not in request or request[field_name] is None:
35+
request[field_name] = request_id_val
3536
elif not request.get(field_name):
36-
request[field_name] = str(uuid.uuid4())
37+
request[field_name] = request_id_val
3738
return
3839

3940
if is_proto3_optional:
4041
try:
4142
# Pure protobuf messages
4243
if not request.HasField(field_name):
43-
setattr(request, field_name, str(uuid.uuid4()))
44+
setattr(request, field_name, request_id_val)
4445
except (AttributeError, ValueError):
4546
# Proto-plus messages or other objects
46-
if field_name not in request:
47-
setattr(request, field_name, str(uuid.uuid4()))
47+
if getattr(request, field_name, None) is None:
48+
setattr(request, field_name, request_id_val)
4849
else:
49-
if not getattr(request, field_name):
50-
setattr(request, field_name, str(uuid.uuid4()))
50+
if not getattr(request, field_name, None):
51+
setattr(request, field_name, request_id_val)

packages/gapic-generator/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/_compat.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
try:
2020
from google.api_core.gapic_v1.requests import setup_request_id # type: ignore
2121
except ImportError: # pragma: NO COVER
22-
# TODO: Remove this fallback when google-api-core >= 2.18.0 is the minimum required version.
22+
# TODO(https://github.com/googleapis/google-cloud-python/issues/17812): Remove this fallback when google-api-core >= 2.26.0 is the minimum required version.
2323
def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2424
"""Populate a UUID4 field in the request if it is not already set.
2525
@@ -28,23 +28,24 @@ def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2828
field_name (str): The name of the field to populate.
2929
is_proto3_optional (bool): Whether the field is proto3 optional.
3030
"""
31+
request_id_val = str(uuid.uuid4())
3132
if isinstance(request, dict):
3233
if is_proto3_optional:
33-
if field_name not in request:
34-
request[field_name] = str(uuid.uuid4())
34+
if field_name not in request or request[field_name] is None:
35+
request[field_name] = request_id_val
3536
elif not request.get(field_name):
36-
request[field_name] = str(uuid.uuid4())
37+
request[field_name] = request_id_val
3738
return
3839

3940
if is_proto3_optional:
4041
try:
4142
# Pure protobuf messages
4243
if not request.HasField(field_name):
43-
setattr(request, field_name, str(uuid.uuid4()))
44+
setattr(request, field_name, request_id_val)
4445
except (AttributeError, ValueError):
4546
# Proto-plus messages or other objects
46-
if field_name not in request:
47-
setattr(request, field_name, str(uuid.uuid4()))
47+
if getattr(request, field_name, None) is None:
48+
setattr(request, field_name, request_id_val)
4849
else:
49-
if not getattr(request, field_name):
50-
setattr(request, field_name, str(uuid.uuid4()))
50+
if not getattr(request, field_name, None):
51+
setattr(request, field_name, request_id_val)

packages/gapic-generator/tests/integration/goldens/logging/google/cloud/logging_v2/_compat.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
try:
2020
from google.api_core.gapic_v1.requests import setup_request_id # type: ignore
2121
except ImportError: # pragma: NO COVER
22-
# TODO: Remove this fallback when google-api-core >= 2.18.0 is the minimum required version.
22+
# TODO(https://github.com/googleapis/google-cloud-python/issues/17812): Remove this fallback when google-api-core >= 2.26.0 is the minimum required version.
2323
def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2424
"""Populate a UUID4 field in the request if it is not already set.
2525
@@ -28,23 +28,24 @@ def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2828
field_name (str): The name of the field to populate.
2929
is_proto3_optional (bool): Whether the field is proto3 optional.
3030
"""
31+
request_id_val = str(uuid.uuid4())
3132
if isinstance(request, dict):
3233
if is_proto3_optional:
33-
if field_name not in request:
34-
request[field_name] = str(uuid.uuid4())
34+
if field_name not in request or request[field_name] is None:
35+
request[field_name] = request_id_val
3536
elif not request.get(field_name):
36-
request[field_name] = str(uuid.uuid4())
37+
request[field_name] = request_id_val
3738
return
3839

3940
if is_proto3_optional:
4041
try:
4142
# Pure protobuf messages
4243
if not request.HasField(field_name):
43-
setattr(request, field_name, str(uuid.uuid4()))
44+
setattr(request, field_name, request_id_val)
4445
except (AttributeError, ValueError):
4546
# Proto-plus messages or other objects
46-
if field_name not in request:
47-
setattr(request, field_name, str(uuid.uuid4()))
47+
if getattr(request, field_name, None) is None:
48+
setattr(request, field_name, request_id_val)
4849
else:
49-
if not getattr(request, field_name):
50-
setattr(request, field_name, str(uuid.uuid4()))
50+
if not getattr(request, field_name, None):
51+
setattr(request, field_name, request_id_val)

packages/gapic-generator/tests/integration/goldens/logging_internal/google/cloud/logging_v2/_compat.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
try:
2020
from google.api_core.gapic_v1.requests import setup_request_id # type: ignore
2121
except ImportError: # pragma: NO COVER
22-
# TODO: Remove this fallback when google-api-core >= 2.18.0 is the minimum required version.
22+
# TODO(https://github.com/googleapis/google-cloud-python/issues/17812): Remove this fallback when google-api-core >= 2.26.0 is the minimum required version.
2323
def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2424
"""Populate a UUID4 field in the request if it is not already set.
2525
@@ -28,23 +28,24 @@ def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2828
field_name (str): The name of the field to populate.
2929
is_proto3_optional (bool): Whether the field is proto3 optional.
3030
"""
31+
request_id_val = str(uuid.uuid4())
3132
if isinstance(request, dict):
3233
if is_proto3_optional:
33-
if field_name not in request:
34-
request[field_name] = str(uuid.uuid4())
34+
if field_name not in request or request[field_name] is None:
35+
request[field_name] = request_id_val
3536
elif not request.get(field_name):
36-
request[field_name] = str(uuid.uuid4())
37+
request[field_name] = request_id_val
3738
return
3839

3940
if is_proto3_optional:
4041
try:
4142
# Pure protobuf messages
4243
if not request.HasField(field_name):
43-
setattr(request, field_name, str(uuid.uuid4()))
44+
setattr(request, field_name, request_id_val)
4445
except (AttributeError, ValueError):
4546
# Proto-plus messages or other objects
46-
if field_name not in request:
47-
setattr(request, field_name, str(uuid.uuid4()))
47+
if getattr(request, field_name, None) is None:
48+
setattr(request, field_name, request_id_val)
4849
else:
49-
if not getattr(request, field_name):
50-
setattr(request, field_name, str(uuid.uuid4()))
50+
if not getattr(request, field_name, None):
51+
setattr(request, field_name, request_id_val)

packages/gapic-generator/tests/integration/goldens/redis/google/cloud/redis_v1/_compat.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
try:
2020
from google.api_core.gapic_v1.requests import setup_request_id # type: ignore
2121
except ImportError: # pragma: NO COVER
22-
# TODO: Remove this fallback when google-api-core >= 2.18.0 is the minimum required version.
22+
# TODO(https://github.com/googleapis/google-cloud-python/issues/17812): Remove this fallback when google-api-core >= 2.26.0 is the minimum required version.
2323
def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2424
"""Populate a UUID4 field in the request if it is not already set.
2525
@@ -28,23 +28,24 @@ def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2828
field_name (str): The name of the field to populate.
2929
is_proto3_optional (bool): Whether the field is proto3 optional.
3030
"""
31+
request_id_val = str(uuid.uuid4())
3132
if isinstance(request, dict):
3233
if is_proto3_optional:
33-
if field_name not in request:
34-
request[field_name] = str(uuid.uuid4())
34+
if field_name not in request or request[field_name] is None:
35+
request[field_name] = request_id_val
3536
elif not request.get(field_name):
36-
request[field_name] = str(uuid.uuid4())
37+
request[field_name] = request_id_val
3738
return
3839

3940
if is_proto3_optional:
4041
try:
4142
# Pure protobuf messages
4243
if not request.HasField(field_name):
43-
setattr(request, field_name, str(uuid.uuid4()))
44+
setattr(request, field_name, request_id_val)
4445
except (AttributeError, ValueError):
4546
# Proto-plus messages or other objects
46-
if field_name not in request:
47-
setattr(request, field_name, str(uuid.uuid4()))
47+
if getattr(request, field_name, None) is None:
48+
setattr(request, field_name, request_id_val)
4849
else:
49-
if not getattr(request, field_name):
50-
setattr(request, field_name, str(uuid.uuid4()))
50+
if not getattr(request, field_name, None):
51+
setattr(request, field_name, request_id_val)

packages/gapic-generator/tests/integration/goldens/redis_selective/google/cloud/redis_v1/_compat.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
try:
2020
from google.api_core.gapic_v1.requests import setup_request_id # type: ignore
2121
except ImportError: # pragma: NO COVER
22-
# TODO: Remove this fallback when google-api-core >= 2.18.0 is the minimum required version.
22+
# TODO(https://github.com/googleapis/google-cloud-python/issues/17812): Remove this fallback when google-api-core >= 2.26.0 is the minimum required version.
2323
def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2424
"""Populate a UUID4 field in the request if it is not already set.
2525
@@ -28,23 +28,24 @@ def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2828
field_name (str): The name of the field to populate.
2929
is_proto3_optional (bool): Whether the field is proto3 optional.
3030
"""
31+
request_id_val = str(uuid.uuid4())
3132
if isinstance(request, dict):
3233
if is_proto3_optional:
33-
if field_name not in request:
34-
request[field_name] = str(uuid.uuid4())
34+
if field_name not in request or request[field_name] is None:
35+
request[field_name] = request_id_val
3536
elif not request.get(field_name):
36-
request[field_name] = str(uuid.uuid4())
37+
request[field_name] = request_id_val
3738
return
3839

3940
if is_proto3_optional:
4041
try:
4142
# Pure protobuf messages
4243
if not request.HasField(field_name):
43-
setattr(request, field_name, str(uuid.uuid4()))
44+
setattr(request, field_name, request_id_val)
4445
except (AttributeError, ValueError):
4546
# Proto-plus messages or other objects
46-
if field_name not in request:
47-
setattr(request, field_name, str(uuid.uuid4()))
47+
if getattr(request, field_name, None) is None:
48+
setattr(request, field_name, request_id_val)
4849
else:
49-
if not getattr(request, field_name):
50-
setattr(request, field_name, str(uuid.uuid4()))
50+
if not getattr(request, field_name, None):
51+
setattr(request, field_name, request_id_val)

packages/gapic-generator/tests/integration/goldens/storagebatchoperations/google/cloud/storagebatchoperations_v1/_compat.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
try:
2020
from google.api_core.gapic_v1.requests import setup_request_id # type: ignore
2121
except ImportError: # pragma: NO COVER
22-
# TODO: Remove this fallback when google-api-core >= 2.18.0 is the minimum required version.
22+
# TODO(https://github.com/googleapis/google-cloud-python/issues/17812): Remove this fallback when google-api-core >= 2.26.0 is the minimum required version.
2323
def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2424
"""Populate a UUID4 field in the request if it is not already set.
2525
@@ -28,23 +28,24 @@ def setup_request_id(request, field_name: str, is_proto3_optional: bool):
2828
field_name (str): The name of the field to populate.
2929
is_proto3_optional (bool): Whether the field is proto3 optional.
3030
"""
31+
request_id_val = str(uuid.uuid4())
3132
if isinstance(request, dict):
3233
if is_proto3_optional:
33-
if field_name not in request:
34-
request[field_name] = str(uuid.uuid4())
34+
if field_name not in request or request[field_name] is None:
35+
request[field_name] = request_id_val
3536
elif not request.get(field_name):
36-
request[field_name] = str(uuid.uuid4())
37+
request[field_name] = request_id_val
3738
return
3839

3940
if is_proto3_optional:
4041
try:
4142
# Pure protobuf messages
4243
if not request.HasField(field_name):
43-
setattr(request, field_name, str(uuid.uuid4()))
44+
setattr(request, field_name, request_id_val)
4445
except (AttributeError, ValueError):
4546
# Proto-plus messages or other objects
46-
if field_name not in request:
47-
setattr(request, field_name, str(uuid.uuid4()))
47+
if getattr(request, field_name, None) is None:
48+
setattr(request, field_name, request_id_val)
4849
else:
49-
if not getattr(request, field_name):
50-
setattr(request, field_name, str(uuid.uuid4()))
50+
if not getattr(request, field_name, None):
51+
setattr(request, field_name, request_id_val)

0 commit comments

Comments
 (0)