Skip to content

Commit c2f1711

Browse files
chore: [Many APIs] Update gapic-generator-python to v1.19.1 (googleapis#13159)
- [ ] Regenerate this pull request now. PiperOrigin-RevId: 684571179 Source-Link: googleapis/googleapis@fbdc238 Source-Link: https://github.com/googleapis/googleapis-gen/commit/3a2cdcfb80c2d0f5ec0cc663c2bab0a9486229d0 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLW1hcHMtZmxlZXRlbmdpbmUtZGVsaXZlcnkvLk93bEJvdC55YW1sIiwiaCI6IjNhMmNkY2ZiODBjMmQwZjVlYzBjYzY2M2MyYmFiMGE5NDg2MjI5ZDAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLW1hcHMtZmxlZXRlbmdpbmUvLk93bEJvdC55YW1sIiwiaCI6IjNhMmNkY2ZiODBjMmQwZjVlYzBjYzY2M2MyYmFiMGE5NDg2MjI5ZDAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLW1hcHMtbWFwc3BsYXRmb3JtZGF0YXNldHMvLk93bEJvdC55YW1sIiwiaCI6IjNhMmNkY2ZiODBjMmQwZjVlYzBjYzY2M2MyYmFiMGE5NDg2MjI5ZDAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLW1hcHMtcGxhY2VzLy5Pd2xCb3QueWFtbCIsImgiOiIzYTJjZGNmYjgwYzJkMGY1ZWMwY2M2NjNjMmJhYjBhOTQ4NjIyOWQwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLW1hcHMtcm91dGVvcHRpbWl6YXRpb24vLk93bEJvdC55YW1sIiwiaCI6IjNhMmNkY2ZiODBjMmQwZjVlYzBjYzY2M2MyYmFiMGE5NDg2MjI5ZDAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLW1hcHMtcm91dGluZy8uT3dsQm90LnlhbWwiLCJoIjoiM2EyY2RjZmI4MGMyZDBmNWVjMGNjNjYzYzJiYWIwYTk0ODYyMjlkMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLW1hcHMtc29sYXIvLk93bEJvdC55YW1sIiwiaCI6IjNhMmNkY2ZiODBjMmQwZjVlYzBjYzY2M2MyYmFiMGE5NDg2MjI5ZDAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLWNzcy8uT3dsQm90LnlhbWwiLCJoIjoiM2EyY2RjZmI4MGMyZDBmNWVjMGNjNjYzYzJiYWIwYTk0ODYyMjlkMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LWFjY291bnRzLy5Pd2xCb3QueWFtbCIsImgiOiIzYTJjZGNmYjgwYzJkMGY1ZWMwY2M2NjNjMmJhYjBhOTQ4NjIyOWQwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LWNvbnZlcnNpb25zLy5Pd2xCb3QueWFtbCIsImgiOiIzYTJjZGNmYjgwYzJkMGY1ZWMwY2M2NjNjMmJhYjBhOTQ4NjIyOWQwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LWRhdGFzb3VyY2VzLy5Pd2xCb3QueWFtbCIsImgiOiIzYTJjZGNmYjgwYzJkMGY1ZWMwY2M2NjNjMmJhYjBhOTQ4NjIyOWQwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LWludmVudG9yaWVzLy5Pd2xCb3QueWFtbCIsImgiOiIzYTJjZGNmYjgwYzJkMGY1ZWMwY2M2NjNjMmJhYjBhOTQ4NjIyOWQwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LWxmcC8uT3dsQm90LnlhbWwiLCJoIjoiM2EyY2RjZmI4MGMyZDBmNWVjMGNjNjYzYzJiYWIwYTk0ODYyMjlkMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LW5vdGlmaWNhdGlvbnMvLk93bEJvdC55YW1sIiwiaCI6IjNhMmNkY2ZiODBjMmQwZjVlYzBjYzY2M2MyYmFiMGE5NDg2MjI5ZDAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LXByb2R1Y3RzLy5Pd2xCb3QueWFtbCIsImgiOiIzYTJjZGNmYjgwYzJkMGY1ZWMwY2M2NjNjMmJhYjBhOTQ4NjIyOWQwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LXByb21vdGlvbnMvLk93bEJvdC55YW1sIiwiaCI6IjNhMmNkY2ZiODBjMmQwZjVlYzBjYzY2M2MyYmFiMGE5NDg2MjI5ZDAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LXF1b3RhLy5Pd2xCb3QueWFtbCIsImgiOiIzYTJjZGNmYjgwYzJkMGY1ZWMwY2M2NjNjMmJhYjBhOTQ4NjIyOWQwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLW1lcmNoYW50LXJlcG9ydHMvLk93bEJvdC55YW1sIiwiaCI6IjNhMmNkY2ZiODBjMmQwZjVlYzBjYzY2M2MyYmFiMGE5NDg2MjI5ZDAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLXNob3BwaW5nLXR5cGUvLk93bEJvdC55YW1sIiwiaCI6IjNhMmNkY2ZiODBjMmQwZjVlYzBjYzY2M2MyYmFiMGE5NDg2MjI5ZDAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ3JhZmVhcy8uT3dsQm90LnlhbWwiLCJoIjoiM2EyY2RjZmI4MGMyZDBmNWVjMGNjNjYzYzJiYWIwYTk0ODYyMjlkMCJ9 --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com> Co-authored-by: Anthonios Partheniou <partheniou@google.com>
1 parent 43ef51c commit c2f1711

File tree

263 files changed

+61578
-43425
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

263 files changed

+61578
-43425
lines changed

packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery/gapic_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515
#
16-
__version__ = "0.2.4" # {x-release-please-version}
16+
__version__ = "0.0.0" # {x-release-please-version}

packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/gapic_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515
#
16-
__version__ = "0.2.4" # {x-release-please-version}
16+
__version__ = "0.0.0" # {x-release-please-version}

packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/async_client.py

Lines changed: 110 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -413,11 +413,17 @@ async def sample_create_delivery_vehicle():
413413
self._client._transport.create_delivery_vehicle
414414
]
415415

416-
# Certain fields should be provided within the metadata header;
417-
# add these here.
418-
metadata = tuple(metadata) + (
419-
gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
420-
)
416+
header_params = {}
417+
418+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
419+
regex_match = routing_param_regex.match(request.parent)
420+
if regex_match and regex_match.group("provider_id"):
421+
header_params["provider_id"] = regex_match.group("provider_id")
422+
423+
if header_params:
424+
metadata = tuple(metadata) + (
425+
gapic_v1.routing_header.to_grpc_metadata(header_params),
426+
)
421427

422428
# Validate the universe domain.
423429
self._client._validate_universe_domain()
@@ -529,11 +535,17 @@ async def sample_get_delivery_vehicle():
529535
self._client._transport.get_delivery_vehicle
530536
]
531537

532-
# Certain fields should be provided within the metadata header;
533-
# add these here.
534-
metadata = tuple(metadata) + (
535-
gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)),
536-
)
538+
header_params = {}
539+
540+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
541+
regex_match = routing_param_regex.match(request.name)
542+
if regex_match and regex_match.group("provider_id"):
543+
header_params["provider_id"] = regex_match.group("provider_id")
544+
545+
if header_params:
546+
metadata = tuple(metadata) + (
547+
gapic_v1.routing_header.to_grpc_metadata(header_params),
548+
)
537549

538550
# Validate the universe domain.
539551
self._client._validate_universe_domain()
@@ -668,13 +680,17 @@ async def sample_update_delivery_vehicle():
668680
self._client._transport.update_delivery_vehicle
669681
]
670682

671-
# Certain fields should be provided within the metadata header;
672-
# add these here.
673-
metadata = tuple(metadata) + (
674-
gapic_v1.routing_header.to_grpc_metadata(
675-
(("delivery_vehicle.name", request.delivery_vehicle.name),)
676-
),
677-
)
683+
header_params = {}
684+
685+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
686+
regex_match = routing_param_regex.match(request.delivery_vehicle.name)
687+
if regex_match and regex_match.group("provider_id"):
688+
header_params["provider_id"] = regex_match.group("provider_id")
689+
690+
if header_params:
691+
metadata = tuple(metadata) + (
692+
gapic_v1.routing_header.to_grpc_metadata(header_params),
693+
)
678694

679695
# Validate the universe domain.
680696
self._client._validate_universe_domain()
@@ -758,11 +774,17 @@ async def sample_batch_create_tasks():
758774
self._client._transport.batch_create_tasks
759775
]
760776

761-
# Certain fields should be provided within the metadata header;
762-
# add these here.
763-
metadata = tuple(metadata) + (
764-
gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
765-
)
777+
header_params = {}
778+
779+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
780+
regex_match = routing_param_regex.match(request.parent)
781+
if regex_match and regex_match.group("provider_id"):
782+
header_params["provider_id"] = regex_match.group("provider_id")
783+
784+
if header_params:
785+
metadata = tuple(metadata) + (
786+
gapic_v1.routing_header.to_grpc_metadata(header_params),
787+
)
766788

767789
# Validate the universe domain.
768790
self._client._validate_universe_domain()
@@ -928,11 +950,17 @@ async def sample_create_task():
928950
self._client._transport.create_task
929951
]
930952

931-
# Certain fields should be provided within the metadata header;
932-
# add these here.
933-
metadata = tuple(metadata) + (
934-
gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
935-
)
953+
header_params = {}
954+
955+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
956+
regex_match = routing_param_regex.match(request.parent)
957+
if regex_match and regex_match.group("provider_id"):
958+
header_params["provider_id"] = regex_match.group("provider_id")
959+
960+
if header_params:
961+
metadata = tuple(metadata) + (
962+
gapic_v1.routing_header.to_grpc_metadata(header_params),
963+
)
936964

937965
# Validate the universe domain.
938966
self._client._validate_universe_domain()
@@ -1047,11 +1075,17 @@ async def sample_get_task():
10471075
# and friendly error handling.
10481076
rpc = self._client._transport._wrapped_methods[self._client._transport.get_task]
10491077

1050-
# Certain fields should be provided within the metadata header;
1051-
# add these here.
1052-
metadata = tuple(metadata) + (
1053-
gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)),
1054-
)
1078+
header_params = {}
1079+
1080+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
1081+
regex_match = routing_param_regex.match(request.name)
1082+
if regex_match and regex_match.group("provider_id"):
1083+
header_params["provider_id"] = regex_match.group("provider_id")
1084+
1085+
if header_params:
1086+
metadata = tuple(metadata) + (
1087+
gapic_v1.routing_header.to_grpc_metadata(header_params),
1088+
)
10551089

10561090
# Validate the universe domain.
10571091
self._client._validate_universe_domain()
@@ -1201,13 +1235,17 @@ async def sample_update_task():
12011235
self._client._transport.update_task
12021236
]
12031237

1204-
# Certain fields should be provided within the metadata header;
1205-
# add these here.
1206-
metadata = tuple(metadata) + (
1207-
gapic_v1.routing_header.to_grpc_metadata(
1208-
(("task.name", request.task.name),)
1209-
),
1210-
)
1238+
header_params = {}
1239+
1240+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
1241+
regex_match = routing_param_regex.match(request.task.name)
1242+
if regex_match and regex_match.group("provider_id"):
1243+
header_params["provider_id"] = regex_match.group("provider_id")
1244+
1245+
if header_params:
1246+
metadata = tuple(metadata) + (
1247+
gapic_v1.routing_header.to_grpc_metadata(header_params),
1248+
)
12111249

12121250
# Validate the universe domain.
12131251
self._client._validate_universe_domain()
@@ -1314,11 +1352,17 @@ async def sample_list_tasks():
13141352
self._client._transport.list_tasks
13151353
]
13161354

1317-
# Certain fields should be provided within the metadata header;
1318-
# add these here.
1319-
metadata = tuple(metadata) + (
1320-
gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
1321-
)
1355+
header_params = {}
1356+
1357+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
1358+
regex_match = routing_param_regex.match(request.parent)
1359+
if regex_match and regex_match.group("provider_id"):
1360+
header_params["provider_id"] = regex_match.group("provider_id")
1361+
1362+
if header_params:
1363+
metadata = tuple(metadata) + (
1364+
gapic_v1.routing_header.to_grpc_metadata(header_params),
1365+
)
13221366

13231367
# Validate the universe domain.
13241368
self._client._validate_universe_domain()
@@ -1437,11 +1481,17 @@ async def sample_get_task_tracking_info():
14371481
self._client._transport.get_task_tracking_info
14381482
]
14391483

1440-
# Certain fields should be provided within the metadata header;
1441-
# add these here.
1442-
metadata = tuple(metadata) + (
1443-
gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)),
1444-
)
1484+
header_params = {}
1485+
1486+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
1487+
regex_match = routing_param_regex.match(request.name)
1488+
if regex_match and regex_match.group("provider_id"):
1489+
header_params["provider_id"] = regex_match.group("provider_id")
1490+
1491+
if header_params:
1492+
metadata = tuple(metadata) + (
1493+
gapic_v1.routing_header.to_grpc_metadata(header_params),
1494+
)
14451495

14461496
# Validate the universe domain.
14471497
self._client._validate_universe_domain()
@@ -1548,11 +1598,17 @@ async def sample_list_delivery_vehicles():
15481598
self._client._transport.list_delivery_vehicles
15491599
]
15501600

1551-
# Certain fields should be provided within the metadata header;
1552-
# add these here.
1553-
metadata = tuple(metadata) + (
1554-
gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
1555-
)
1601+
header_params = {}
1602+
1603+
routing_param_regex = re.compile("^(?P<provider_id>providers/[^/]+)$")
1604+
regex_match = routing_param_regex.match(request.parent)
1605+
if regex_match and regex_match.group("provider_id"):
1606+
header_params["provider_id"] = regex_match.group("provider_id")
1607+
1608+
if header_params:
1609+
metadata = tuple(metadata) + (
1610+
gapic_v1.routing_header.to_grpc_metadata(header_params),
1611+
)
15561612

15571613
# Validate the universe domain.
15581614
self._client._validate_universe_domain()
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
transport inheritance structure
3+
_______________________________
4+
5+
`DeliveryServiceTransport` is the ABC for all transports.
6+
- public child `DeliveryServiceGrpcTransport` for sync gRPC transport (defined in `grpc.py`).
7+
- public child `DeliveryServiceGrpcAsyncIOTransport` for async gRPC transport (defined in `grpc_asyncio.py`).
8+
- private child `_BaseDeliveryServiceRestTransport` for base REST transport with inner classes `_BaseMETHOD` (defined in `rest_base.py`).
9+
- public child `DeliveryServiceRestTransport` for sync REST transport with inner classes `METHOD` derived from the parent's corresponding `_BaseMETHOD` classes (defined in `rest.py`).

packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/transports/grpc_asyncio.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515
#
16+
import inspect
1617
from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union
1718
import warnings
1819

@@ -231,6 +232,9 @@ def __init__(
231232
)
232233

233234
# Wrap messages. This must be done after self._grpc_channel exists
235+
self._wrap_with_kind = (
236+
"kind" in inspect.signature(gapic_v1.method_async.wrap_method).parameters
237+
)
234238
self._prep_wrapped_messages(client_info)
235239

236240
@property
@@ -535,7 +539,7 @@ def list_delivery_vehicles(
535539
def _prep_wrapped_messages(self, client_info):
536540
"""Precompute the wrapped methods, overriding the base class method to use async wrappers."""
537541
self._wrapped_methods = {
538-
self.create_delivery_vehicle: gapic_v1.method_async.wrap_method(
542+
self.create_delivery_vehicle: self._wrap_method(
539543
self.create_delivery_vehicle,
540544
default_retry=retries.AsyncRetry(
541545
initial=1.0,
@@ -549,7 +553,7 @@ def _prep_wrapped_messages(self, client_info):
549553
default_timeout=60.0,
550554
client_info=client_info,
551555
),
552-
self.get_delivery_vehicle: gapic_v1.method_async.wrap_method(
556+
self.get_delivery_vehicle: self._wrap_method(
553557
self.get_delivery_vehicle,
554558
default_retry=retries.AsyncRetry(
555559
initial=1.0,
@@ -563,7 +567,7 @@ def _prep_wrapped_messages(self, client_info):
563567
default_timeout=60.0,
564568
client_info=client_info,
565569
),
566-
self.update_delivery_vehicle: gapic_v1.method_async.wrap_method(
570+
self.update_delivery_vehicle: self._wrap_method(
567571
self.update_delivery_vehicle,
568572
default_retry=retries.AsyncRetry(
569573
initial=1.0,
@@ -577,7 +581,7 @@ def _prep_wrapped_messages(self, client_info):
577581
default_timeout=60.0,
578582
client_info=client_info,
579583
),
580-
self.batch_create_tasks: gapic_v1.method_async.wrap_method(
584+
self.batch_create_tasks: self._wrap_method(
581585
self.batch_create_tasks,
582586
default_retry=retries.AsyncRetry(
583587
initial=1.0,
@@ -591,7 +595,7 @@ def _prep_wrapped_messages(self, client_info):
591595
default_timeout=60.0,
592596
client_info=client_info,
593597
),
594-
self.create_task: gapic_v1.method_async.wrap_method(
598+
self.create_task: self._wrap_method(
595599
self.create_task,
596600
default_retry=retries.AsyncRetry(
597601
initial=1.0,
@@ -605,7 +609,7 @@ def _prep_wrapped_messages(self, client_info):
605609
default_timeout=60.0,
606610
client_info=client_info,
607611
),
608-
self.get_task: gapic_v1.method_async.wrap_method(
612+
self.get_task: self._wrap_method(
609613
self.get_task,
610614
default_retry=retries.AsyncRetry(
611615
initial=1.0,
@@ -619,7 +623,7 @@ def _prep_wrapped_messages(self, client_info):
619623
default_timeout=60.0,
620624
client_info=client_info,
621625
),
622-
self.update_task: gapic_v1.method_async.wrap_method(
626+
self.update_task: self._wrap_method(
623627
self.update_task,
624628
default_retry=retries.AsyncRetry(
625629
initial=1.0,
@@ -633,7 +637,7 @@ def _prep_wrapped_messages(self, client_info):
633637
default_timeout=60.0,
634638
client_info=client_info,
635639
),
636-
self.list_tasks: gapic_v1.method_async.wrap_method(
640+
self.list_tasks: self._wrap_method(
637641
self.list_tasks,
638642
default_retry=retries.AsyncRetry(
639643
initial=1.0,
@@ -647,7 +651,7 @@ def _prep_wrapped_messages(self, client_info):
647651
default_timeout=60.0,
648652
client_info=client_info,
649653
),
650-
self.get_task_tracking_info: gapic_v1.method_async.wrap_method(
654+
self.get_task_tracking_info: self._wrap_method(
651655
self.get_task_tracking_info,
652656
default_retry=retries.AsyncRetry(
653657
initial=1.0,
@@ -661,7 +665,7 @@ def _prep_wrapped_messages(self, client_info):
661665
default_timeout=60.0,
662666
client_info=client_info,
663667
),
664-
self.list_delivery_vehicles: gapic_v1.method_async.wrap_method(
668+
self.list_delivery_vehicles: self._wrap_method(
665669
self.list_delivery_vehicles,
666670
default_retry=retries.AsyncRetry(
667671
initial=1.0,
@@ -677,8 +681,17 @@ def _prep_wrapped_messages(self, client_info):
677681
),
678682
}
679683

684+
def _wrap_method(self, func, *args, **kwargs):
685+
if self._wrap_with_kind: # pragma: NO COVER
686+
kwargs["kind"] = self.kind
687+
return gapic_v1.method_async.wrap_method(func, *args, **kwargs)
688+
680689
def close(self):
681690
return self.grpc_channel.close()
682691

692+
@property
693+
def kind(self) -> str:
694+
return "grpc_asyncio"
695+
683696

684697
__all__ = ("DeliveryServiceGrpcAsyncIOTransport",)

0 commit comments

Comments
 (0)