1# -*- coding: utf-8 -*-
2# Copyright 2023 Google LLC
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16import warnings
17from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union
18
19from google.api_core import gapic_v1
20from google.api_core import grpc_helpers_async
21from google.api_core import operations_v1
22from google.auth import credentials as ga_credentials # type: ignore
23from google.auth.transport.grpc import SslCredentials # type: ignore
24
25import grpc # type: ignore
26from grpc.experimental import aio # type: ignore
27
28from google.cloud.logging_v2.types import logging_config
29from google.longrunning import operations_pb2 # type: ignore
30from google.protobuf import empty_pb2 # type: ignore
31from .base import ConfigServiceV2Transport, DEFAULT_CLIENT_INFO
32from .grpc import ConfigServiceV2GrpcTransport
33
34
35class ConfigServiceV2GrpcAsyncIOTransport(ConfigServiceV2Transport):
36 """gRPC AsyncIO backend transport for ConfigServiceV2.
37
38 Service for configuring sinks used to route log entries.
39
40 This class defines the same methods as the primary client, so the
41 primary client can load the underlying transport implementation
42 and call it.
43
44 It sends protocol buffers over the wire using gRPC (which is built on
45 top of HTTP/2); the ``grpcio`` package must be installed.
46 """
47
48 _grpc_channel: aio.Channel
49 _stubs: Dict[str, Callable] = {}
50
51 @classmethod
52 def create_channel(
53 cls,
54 host: str = "logging.googleapis.com",
55 credentials: Optional[ga_credentials.Credentials] = None,
56 credentials_file: Optional[str] = None,
57 scopes: Optional[Sequence[str]] = None,
58 quota_project_id: Optional[str] = None,
59 **kwargs,
60 ) -> aio.Channel:
61 """Create and return a gRPC AsyncIO channel object.
62 Args:
63 host (Optional[str]): The host for the channel to use.
64 credentials (Optional[~.Credentials]): The
65 authorization credentials to attach to requests. These
66 credentials identify this application to the service. If
67 none are specified, the client will attempt to ascertain
68 the credentials from the environment.
69 credentials_file (Optional[str]): A file with credentials that can
70 be loaded with :func:`google.auth.load_credentials_from_file`.
71 This argument is ignored if ``channel`` is provided.
72 scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
73 service. These are only used when credentials are not specified and
74 are passed to :func:`google.auth.default`.
75 quota_project_id (Optional[str]): An optional project to use for billing
76 and quota.
77 kwargs (Optional[dict]): Keyword arguments, which are passed to the
78 channel creation.
79 Returns:
80 aio.Channel: A gRPC AsyncIO channel object.
81 """
82
83 return grpc_helpers_async.create_channel(
84 host,
85 credentials=credentials,
86 credentials_file=credentials_file,
87 quota_project_id=quota_project_id,
88 default_scopes=cls.AUTH_SCOPES,
89 scopes=scopes,
90 default_host=cls.DEFAULT_HOST,
91 **kwargs,
92 )
93
94 def __init__(
95 self,
96 *,
97 host: str = "logging.googleapis.com",
98 credentials: Optional[ga_credentials.Credentials] = None,
99 credentials_file: Optional[str] = None,
100 scopes: Optional[Sequence[str]] = None,
101 channel: Optional[aio.Channel] = None,
102 api_mtls_endpoint: Optional[str] = None,
103 client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None,
104 ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None,
105 client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None,
106 quota_project_id: Optional[str] = None,
107 client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
108 always_use_jwt_access: Optional[bool] = False,
109 api_audience: Optional[str] = None,
110 ) -> None:
111 """Instantiate the transport.
112
113 Args:
114 host (Optional[str]):
115 The hostname to connect to.
116 credentials (Optional[google.auth.credentials.Credentials]): The
117 authorization credentials to attach to requests. These
118 credentials identify the application to the service; if none
119 are specified, the client will attempt to ascertain the
120 credentials from the environment.
121 This argument is ignored if ``channel`` is provided.
122 credentials_file (Optional[str]): A file with credentials that can
123 be loaded with :func:`google.auth.load_credentials_from_file`.
124 This argument is ignored if ``channel`` is provided.
125 scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
126 service. These are only used when credentials are not specified and
127 are passed to :func:`google.auth.default`.
128 channel (Optional[aio.Channel]): A ``Channel`` instance through
129 which to make calls.
130 api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint.
131 If provided, it overrides the ``host`` argument and tries to create
132 a mutual TLS channel with client SSL credentials from
133 ``client_cert_source`` or application default SSL credentials.
134 client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]):
135 Deprecated. A callback to provide client SSL certificate bytes and
136 private key bytes, both in PEM format. It is ignored if
137 ``api_mtls_endpoint`` is None.
138 ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials
139 for the grpc channel. It is ignored if ``channel`` is provided.
140 client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]):
141 A callback to provide client certificate bytes and private key bytes,
142 both in PEM format. It is used to configure a mutual TLS channel. It is
143 ignored if ``channel`` or ``ssl_channel_credentials`` is provided.
144 quota_project_id (Optional[str]): An optional project to use for billing
145 and quota.
146 client_info (google.api_core.gapic_v1.client_info.ClientInfo):
147 The client info used to send a user-agent string along with
148 API requests. If ``None``, then default info will be used.
149 Generally, you only need to set this if you're developing
150 your own client library.
151 always_use_jwt_access (Optional[bool]): Whether self signed JWT should
152 be used for service account credentials.
153
154 Raises:
155 google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
156 creation failed for any reason.
157 google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
158 and ``credentials_file`` are passed.
159 """
160 self._grpc_channel = None
161 self._ssl_channel_credentials = ssl_channel_credentials
162 self._stubs: Dict[str, Callable] = {}
163 self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None
164
165 if api_mtls_endpoint:
166 warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)
167 if client_cert_source:
168 warnings.warn("client_cert_source is deprecated", DeprecationWarning)
169
170 if channel:
171 # Ignore credentials if a channel was passed.
172 credentials = False
173 # If a channel was explicitly provided, set it.
174 self._grpc_channel = channel
175 self._ssl_channel_credentials = None
176 else:
177 if api_mtls_endpoint:
178 host = api_mtls_endpoint
179
180 # Create SSL credentials with client_cert_source or application
181 # default SSL credentials.
182 if client_cert_source:
183 cert, key = client_cert_source()
184 self._ssl_channel_credentials = grpc.ssl_channel_credentials(
185 certificate_chain=cert, private_key=key
186 )
187 else:
188 self._ssl_channel_credentials = SslCredentials().ssl_credentials
189
190 else:
191 if client_cert_source_for_mtls and not ssl_channel_credentials:
192 cert, key = client_cert_source_for_mtls()
193 self._ssl_channel_credentials = grpc.ssl_channel_credentials(
194 certificate_chain=cert, private_key=key
195 )
196
197 # The base transport sets the host, credentials and scopes
198 super().__init__(
199 host=host,
200 credentials=credentials,
201 credentials_file=credentials_file,
202 scopes=scopes,
203 quota_project_id=quota_project_id,
204 client_info=client_info,
205 always_use_jwt_access=always_use_jwt_access,
206 api_audience=api_audience,
207 )
208
209 if not self._grpc_channel:
210 self._grpc_channel = type(self).create_channel(
211 self._host,
212 # use the credentials which are saved
213 credentials=self._credentials,
214 # Set ``credentials_file`` to ``None`` here as
215 # the credentials that we saved earlier should be used.
216 credentials_file=None,
217 scopes=self._scopes,
218 ssl_credentials=self._ssl_channel_credentials,
219 quota_project_id=quota_project_id,
220 options=[
221 ("grpc.max_send_message_length", -1),
222 ("grpc.max_receive_message_length", -1),
223 ],
224 )
225
226 # Wrap messages. This must be done after self._grpc_channel exists
227 self._prep_wrapped_messages(client_info)
228
229 @property
230 def grpc_channel(self) -> aio.Channel:
231 """Create the channel designed to connect to this service.
232
233 This property caches on the instance; repeated calls return
234 the same channel.
235 """
236 # Return the channel from cache.
237 return self._grpc_channel
238
239 @property
240 def operations_client(self) -> operations_v1.OperationsAsyncClient:
241 """Create the client designed to process long-running operations.
242
243 This property caches on the instance; repeated calls return the same
244 client.
245 """
246 # Quick check: Only create a new client if we do not already have one.
247 if self._operations_client is None:
248 self._operations_client = operations_v1.OperationsAsyncClient(
249 self.grpc_channel
250 )
251
252 # Return the client from cache.
253 return self._operations_client
254
255 @property
256 def list_buckets(
257 self,
258 ) -> Callable[
259 [logging_config.ListBucketsRequest],
260 Awaitable[logging_config.ListBucketsResponse],
261 ]:
262 r"""Return a callable for the list buckets method over gRPC.
263
264 Lists log buckets.
265
266 Returns:
267 Callable[[~.ListBucketsRequest],
268 Awaitable[~.ListBucketsResponse]]:
269 A function that, when called, will call the underlying RPC
270 on the server.
271 """
272 # Generate a "stub function" on-the-fly which will actually make
273 # the request.
274 # gRPC handles serialization and deserialization, so we just need
275 # to pass in the functions for each.
276 if "list_buckets" not in self._stubs:
277 self._stubs["list_buckets"] = self.grpc_channel.unary_unary(
278 "/google.logging.v2.ConfigServiceV2/ListBuckets",
279 request_serializer=logging_config.ListBucketsRequest.serialize,
280 response_deserializer=logging_config.ListBucketsResponse.deserialize,
281 )
282 return self._stubs["list_buckets"]
283
284 @property
285 def get_bucket(
286 self,
287 ) -> Callable[
288 [logging_config.GetBucketRequest], Awaitable[logging_config.LogBucket]
289 ]:
290 r"""Return a callable for the get bucket method over gRPC.
291
292 Gets a log bucket.
293
294 Returns:
295 Callable[[~.GetBucketRequest],
296 Awaitable[~.LogBucket]]:
297 A function that, when called, will call the underlying RPC
298 on the server.
299 """
300 # Generate a "stub function" on-the-fly which will actually make
301 # the request.
302 # gRPC handles serialization and deserialization, so we just need
303 # to pass in the functions for each.
304 if "get_bucket" not in self._stubs:
305 self._stubs["get_bucket"] = self.grpc_channel.unary_unary(
306 "/google.logging.v2.ConfigServiceV2/GetBucket",
307 request_serializer=logging_config.GetBucketRequest.serialize,
308 response_deserializer=logging_config.LogBucket.deserialize,
309 )
310 return self._stubs["get_bucket"]
311
312 @property
313 def create_bucket_async(
314 self,
315 ) -> Callable[
316 [logging_config.CreateBucketRequest], Awaitable[operations_pb2.Operation]
317 ]:
318 r"""Return a callable for the create bucket async method over gRPC.
319
320 Creates a log bucket asynchronously that can be used
321 to store log entries.
322 After a bucket has been created, the bucket's location
323 cannot be changed.
324
325 Returns:
326 Callable[[~.CreateBucketRequest],
327 Awaitable[~.Operation]]:
328 A function that, when called, will call the underlying RPC
329 on the server.
330 """
331 # Generate a "stub function" on-the-fly which will actually make
332 # the request.
333 # gRPC handles serialization and deserialization, so we just need
334 # to pass in the functions for each.
335 if "create_bucket_async" not in self._stubs:
336 self._stubs["create_bucket_async"] = self.grpc_channel.unary_unary(
337 "/google.logging.v2.ConfigServiceV2/CreateBucketAsync",
338 request_serializer=logging_config.CreateBucketRequest.serialize,
339 response_deserializer=operations_pb2.Operation.FromString,
340 )
341 return self._stubs["create_bucket_async"]
342
343 @property
344 def update_bucket_async(
345 self,
346 ) -> Callable[
347 [logging_config.UpdateBucketRequest], Awaitable[operations_pb2.Operation]
348 ]:
349 r"""Return a callable for the update bucket async method over gRPC.
350
351 Updates a log bucket asynchronously.
352
353 If the bucket has a ``lifecycle_state`` of ``DELETE_REQUESTED``,
354 then ``FAILED_PRECONDITION`` will be returned.
355
356 After a bucket has been created, the bucket's location cannot be
357 changed.
358
359 Returns:
360 Callable[[~.UpdateBucketRequest],
361 Awaitable[~.Operation]]:
362 A function that, when called, will call the underlying RPC
363 on the server.
364 """
365 # Generate a "stub function" on-the-fly which will actually make
366 # the request.
367 # gRPC handles serialization and deserialization, so we just need
368 # to pass in the functions for each.
369 if "update_bucket_async" not in self._stubs:
370 self._stubs["update_bucket_async"] = self.grpc_channel.unary_unary(
371 "/google.logging.v2.ConfigServiceV2/UpdateBucketAsync",
372 request_serializer=logging_config.UpdateBucketRequest.serialize,
373 response_deserializer=operations_pb2.Operation.FromString,
374 )
375 return self._stubs["update_bucket_async"]
376
377 @property
378 def create_bucket(
379 self,
380 ) -> Callable[
381 [logging_config.CreateBucketRequest], Awaitable[logging_config.LogBucket]
382 ]:
383 r"""Return a callable for the create bucket method over gRPC.
384
385 Creates a log bucket that can be used to store log
386 entries. After a bucket has been created, the bucket's
387 location cannot be changed.
388
389 Returns:
390 Callable[[~.CreateBucketRequest],
391 Awaitable[~.LogBucket]]:
392 A function that, when called, will call the underlying RPC
393 on the server.
394 """
395 # Generate a "stub function" on-the-fly which will actually make
396 # the request.
397 # gRPC handles serialization and deserialization, so we just need
398 # to pass in the functions for each.
399 if "create_bucket" not in self._stubs:
400 self._stubs["create_bucket"] = self.grpc_channel.unary_unary(
401 "/google.logging.v2.ConfigServiceV2/CreateBucket",
402 request_serializer=logging_config.CreateBucketRequest.serialize,
403 response_deserializer=logging_config.LogBucket.deserialize,
404 )
405 return self._stubs["create_bucket"]
406
407 @property
408 def update_bucket(
409 self,
410 ) -> Callable[
411 [logging_config.UpdateBucketRequest], Awaitable[logging_config.LogBucket]
412 ]:
413 r"""Return a callable for the update bucket method over gRPC.
414
415 Updates a log bucket.
416
417 If the bucket has a ``lifecycle_state`` of ``DELETE_REQUESTED``,
418 then ``FAILED_PRECONDITION`` will be returned.
419
420 After a bucket has been created, the bucket's location cannot be
421 changed.
422
423 Returns:
424 Callable[[~.UpdateBucketRequest],
425 Awaitable[~.LogBucket]]:
426 A function that, when called, will call the underlying RPC
427 on the server.
428 """
429 # Generate a "stub function" on-the-fly which will actually make
430 # the request.
431 # gRPC handles serialization and deserialization, so we just need
432 # to pass in the functions for each.
433 if "update_bucket" not in self._stubs:
434 self._stubs["update_bucket"] = self.grpc_channel.unary_unary(
435 "/google.logging.v2.ConfigServiceV2/UpdateBucket",
436 request_serializer=logging_config.UpdateBucketRequest.serialize,
437 response_deserializer=logging_config.LogBucket.deserialize,
438 )
439 return self._stubs["update_bucket"]
440
441 @property
442 def delete_bucket(
443 self,
444 ) -> Callable[[logging_config.DeleteBucketRequest], Awaitable[empty_pb2.Empty]]:
445 r"""Return a callable for the delete bucket method over gRPC.
446
447 Deletes a log bucket.
448
449 Changes the bucket's ``lifecycle_state`` to the
450 ``DELETE_REQUESTED`` state. After 7 days, the bucket will be
451 purged and all log entries in the bucket will be permanently
452 deleted.
453
454 Returns:
455 Callable[[~.DeleteBucketRequest],
456 Awaitable[~.Empty]]:
457 A function that, when called, will call the underlying RPC
458 on the server.
459 """
460 # Generate a "stub function" on-the-fly which will actually make
461 # the request.
462 # gRPC handles serialization and deserialization, so we just need
463 # to pass in the functions for each.
464 if "delete_bucket" not in self._stubs:
465 self._stubs["delete_bucket"] = self.grpc_channel.unary_unary(
466 "/google.logging.v2.ConfigServiceV2/DeleteBucket",
467 request_serializer=logging_config.DeleteBucketRequest.serialize,
468 response_deserializer=empty_pb2.Empty.FromString,
469 )
470 return self._stubs["delete_bucket"]
471
472 @property
473 def undelete_bucket(
474 self,
475 ) -> Callable[[logging_config.UndeleteBucketRequest], Awaitable[empty_pb2.Empty]]:
476 r"""Return a callable for the undelete bucket method over gRPC.
477
478 Undeletes a log bucket. A bucket that has been
479 deleted can be undeleted within the grace period of 7
480 days.
481
482 Returns:
483 Callable[[~.UndeleteBucketRequest],
484 Awaitable[~.Empty]]:
485 A function that, when called, will call the underlying RPC
486 on the server.
487 """
488 # Generate a "stub function" on-the-fly which will actually make
489 # the request.
490 # gRPC handles serialization and deserialization, so we just need
491 # to pass in the functions for each.
492 if "undelete_bucket" not in self._stubs:
493 self._stubs["undelete_bucket"] = self.grpc_channel.unary_unary(
494 "/google.logging.v2.ConfigServiceV2/UndeleteBucket",
495 request_serializer=logging_config.UndeleteBucketRequest.serialize,
496 response_deserializer=empty_pb2.Empty.FromString,
497 )
498 return self._stubs["undelete_bucket"]
499
500 @property
501 def list_views(
502 self,
503 ) -> Callable[
504 [logging_config.ListViewsRequest], Awaitable[logging_config.ListViewsResponse]
505 ]:
506 r"""Return a callable for the list views method over gRPC.
507
508 Lists views on a log bucket.
509
510 Returns:
511 Callable[[~.ListViewsRequest],
512 Awaitable[~.ListViewsResponse]]:
513 A function that, when called, will call the underlying RPC
514 on the server.
515 """
516 # Generate a "stub function" on-the-fly which will actually make
517 # the request.
518 # gRPC handles serialization and deserialization, so we just need
519 # to pass in the functions for each.
520 if "list_views" not in self._stubs:
521 self._stubs["list_views"] = self.grpc_channel.unary_unary(
522 "/google.logging.v2.ConfigServiceV2/ListViews",
523 request_serializer=logging_config.ListViewsRequest.serialize,
524 response_deserializer=logging_config.ListViewsResponse.deserialize,
525 )
526 return self._stubs["list_views"]
527
528 @property
529 def get_view(
530 self,
531 ) -> Callable[[logging_config.GetViewRequest], Awaitable[logging_config.LogView]]:
532 r"""Return a callable for the get view method over gRPC.
533
534 Gets a view on a log bucket..
535
536 Returns:
537 Callable[[~.GetViewRequest],
538 Awaitable[~.LogView]]:
539 A function that, when called, will call the underlying RPC
540 on the server.
541 """
542 # Generate a "stub function" on-the-fly which will actually make
543 # the request.
544 # gRPC handles serialization and deserialization, so we just need
545 # to pass in the functions for each.
546 if "get_view" not in self._stubs:
547 self._stubs["get_view"] = self.grpc_channel.unary_unary(
548 "/google.logging.v2.ConfigServiceV2/GetView",
549 request_serializer=logging_config.GetViewRequest.serialize,
550 response_deserializer=logging_config.LogView.deserialize,
551 )
552 return self._stubs["get_view"]
553
554 @property
555 def create_view(
556 self,
557 ) -> Callable[
558 [logging_config.CreateViewRequest], Awaitable[logging_config.LogView]
559 ]:
560 r"""Return a callable for the create view method over gRPC.
561
562 Creates a view over log entries in a log bucket. A
563 bucket may contain a maximum of 30 views.
564
565 Returns:
566 Callable[[~.CreateViewRequest],
567 Awaitable[~.LogView]]:
568 A function that, when called, will call the underlying RPC
569 on the server.
570 """
571 # Generate a "stub function" on-the-fly which will actually make
572 # the request.
573 # gRPC handles serialization and deserialization, so we just need
574 # to pass in the functions for each.
575 if "create_view" not in self._stubs:
576 self._stubs["create_view"] = self.grpc_channel.unary_unary(
577 "/google.logging.v2.ConfigServiceV2/CreateView",
578 request_serializer=logging_config.CreateViewRequest.serialize,
579 response_deserializer=logging_config.LogView.deserialize,
580 )
581 return self._stubs["create_view"]
582
583 @property
584 def update_view(
585 self,
586 ) -> Callable[
587 [logging_config.UpdateViewRequest], Awaitable[logging_config.LogView]
588 ]:
589 r"""Return a callable for the update view method over gRPC.
590
591 Updates a view on a log bucket. This method replaces the
592 following fields in the existing view with values from the new
593 view: ``filter``. If an ``UNAVAILABLE`` error is returned, this
594 indicates that system is not in a state where it can update the
595 view. If this occurs, please try again in a few minutes.
596
597 Returns:
598 Callable[[~.UpdateViewRequest],
599 Awaitable[~.LogView]]:
600 A function that, when called, will call the underlying RPC
601 on the server.
602 """
603 # Generate a "stub function" on-the-fly which will actually make
604 # the request.
605 # gRPC handles serialization and deserialization, so we just need
606 # to pass in the functions for each.
607 if "update_view" not in self._stubs:
608 self._stubs["update_view"] = self.grpc_channel.unary_unary(
609 "/google.logging.v2.ConfigServiceV2/UpdateView",
610 request_serializer=logging_config.UpdateViewRequest.serialize,
611 response_deserializer=logging_config.LogView.deserialize,
612 )
613 return self._stubs["update_view"]
614
615 @property
616 def delete_view(
617 self,
618 ) -> Callable[[logging_config.DeleteViewRequest], Awaitable[empty_pb2.Empty]]:
619 r"""Return a callable for the delete view method over gRPC.
620
621 Deletes a view on a log bucket. If an ``UNAVAILABLE`` error is
622 returned, this indicates that system is not in a state where it
623 can delete the view. If this occurs, please try again in a few
624 minutes.
625
626 Returns:
627 Callable[[~.DeleteViewRequest],
628 Awaitable[~.Empty]]:
629 A function that, when called, will call the underlying RPC
630 on the server.
631 """
632 # Generate a "stub function" on-the-fly which will actually make
633 # the request.
634 # gRPC handles serialization and deserialization, so we just need
635 # to pass in the functions for each.
636 if "delete_view" not in self._stubs:
637 self._stubs["delete_view"] = self.grpc_channel.unary_unary(
638 "/google.logging.v2.ConfigServiceV2/DeleteView",
639 request_serializer=logging_config.DeleteViewRequest.serialize,
640 response_deserializer=empty_pb2.Empty.FromString,
641 )
642 return self._stubs["delete_view"]
643
644 @property
645 def list_sinks(
646 self,
647 ) -> Callable[
648 [logging_config.ListSinksRequest], Awaitable[logging_config.ListSinksResponse]
649 ]:
650 r"""Return a callable for the list sinks method over gRPC.
651
652 Lists sinks.
653
654 Returns:
655 Callable[[~.ListSinksRequest],
656 Awaitable[~.ListSinksResponse]]:
657 A function that, when called, will call the underlying RPC
658 on the server.
659 """
660 # Generate a "stub function" on-the-fly which will actually make
661 # the request.
662 # gRPC handles serialization and deserialization, so we just need
663 # to pass in the functions for each.
664 if "list_sinks" not in self._stubs:
665 self._stubs["list_sinks"] = self.grpc_channel.unary_unary(
666 "/google.logging.v2.ConfigServiceV2/ListSinks",
667 request_serializer=logging_config.ListSinksRequest.serialize,
668 response_deserializer=logging_config.ListSinksResponse.deserialize,
669 )
670 return self._stubs["list_sinks"]
671
672 @property
673 def get_sink(
674 self,
675 ) -> Callable[[logging_config.GetSinkRequest], Awaitable[logging_config.LogSink]]:
676 r"""Return a callable for the get sink method over gRPC.
677
678 Gets a sink.
679
680 Returns:
681 Callable[[~.GetSinkRequest],
682 Awaitable[~.LogSink]]:
683 A function that, when called, will call the underlying RPC
684 on the server.
685 """
686 # Generate a "stub function" on-the-fly which will actually make
687 # the request.
688 # gRPC handles serialization and deserialization, so we just need
689 # to pass in the functions for each.
690 if "get_sink" not in self._stubs:
691 self._stubs["get_sink"] = self.grpc_channel.unary_unary(
692 "/google.logging.v2.ConfigServiceV2/GetSink",
693 request_serializer=logging_config.GetSinkRequest.serialize,
694 response_deserializer=logging_config.LogSink.deserialize,
695 )
696 return self._stubs["get_sink"]
697
698 @property
699 def create_sink(
700 self,
701 ) -> Callable[
702 [logging_config.CreateSinkRequest], Awaitable[logging_config.LogSink]
703 ]:
704 r"""Return a callable for the create sink method over gRPC.
705
706 Creates a sink that exports specified log entries to a
707 destination. The export of newly-ingested log entries begins
708 immediately, unless the sink's ``writer_identity`` is not
709 permitted to write to the destination. A sink can export log
710 entries only from the resource owning the sink.
711
712 Returns:
713 Callable[[~.CreateSinkRequest],
714 Awaitable[~.LogSink]]:
715 A function that, when called, will call the underlying RPC
716 on the server.
717 """
718 # Generate a "stub function" on-the-fly which will actually make
719 # the request.
720 # gRPC handles serialization and deserialization, so we just need
721 # to pass in the functions for each.
722 if "create_sink" not in self._stubs:
723 self._stubs["create_sink"] = self.grpc_channel.unary_unary(
724 "/google.logging.v2.ConfigServiceV2/CreateSink",
725 request_serializer=logging_config.CreateSinkRequest.serialize,
726 response_deserializer=logging_config.LogSink.deserialize,
727 )
728 return self._stubs["create_sink"]
729
730 @property
731 def update_sink(
732 self,
733 ) -> Callable[
734 [logging_config.UpdateSinkRequest], Awaitable[logging_config.LogSink]
735 ]:
736 r"""Return a callable for the update sink method over gRPC.
737
738 Updates a sink. This method replaces the following fields in the
739 existing sink with values from the new sink: ``destination``,
740 and ``filter``.
741
742 The updated sink might also have a new ``writer_identity``; see
743 the ``unique_writer_identity`` field.
744
745 Returns:
746 Callable[[~.UpdateSinkRequest],
747 Awaitable[~.LogSink]]:
748 A function that, when called, will call the underlying RPC
749 on the server.
750 """
751 # Generate a "stub function" on-the-fly which will actually make
752 # the request.
753 # gRPC handles serialization and deserialization, so we just need
754 # to pass in the functions for each.
755 if "update_sink" not in self._stubs:
756 self._stubs["update_sink"] = self.grpc_channel.unary_unary(
757 "/google.logging.v2.ConfigServiceV2/UpdateSink",
758 request_serializer=logging_config.UpdateSinkRequest.serialize,
759 response_deserializer=logging_config.LogSink.deserialize,
760 )
761 return self._stubs["update_sink"]
762
763 @property
764 def delete_sink(
765 self,
766 ) -> Callable[[logging_config.DeleteSinkRequest], Awaitable[empty_pb2.Empty]]:
767 r"""Return a callable for the delete sink method over gRPC.
768
769 Deletes a sink. If the sink has a unique ``writer_identity``,
770 then that service account is also deleted.
771
772 Returns:
773 Callable[[~.DeleteSinkRequest],
774 Awaitable[~.Empty]]:
775 A function that, when called, will call the underlying RPC
776 on the server.
777 """
778 # Generate a "stub function" on-the-fly which will actually make
779 # the request.
780 # gRPC handles serialization and deserialization, so we just need
781 # to pass in the functions for each.
782 if "delete_sink" not in self._stubs:
783 self._stubs["delete_sink"] = self.grpc_channel.unary_unary(
784 "/google.logging.v2.ConfigServiceV2/DeleteSink",
785 request_serializer=logging_config.DeleteSinkRequest.serialize,
786 response_deserializer=empty_pb2.Empty.FromString,
787 )
788 return self._stubs["delete_sink"]
789
790 @property
791 def create_link(
792 self,
793 ) -> Callable[
794 [logging_config.CreateLinkRequest], Awaitable[operations_pb2.Operation]
795 ]:
796 r"""Return a callable for the create link method over gRPC.
797
798 Asynchronously creates a linked dataset in BigQuery
799 which makes it possible to use BigQuery to read the logs
800 stored in the log bucket. A log bucket may currently
801 only contain one link.
802
803 Returns:
804 Callable[[~.CreateLinkRequest],
805 Awaitable[~.Operation]]:
806 A function that, when called, will call the underlying RPC
807 on the server.
808 """
809 # Generate a "stub function" on-the-fly which will actually make
810 # the request.
811 # gRPC handles serialization and deserialization, so we just need
812 # to pass in the functions for each.
813 if "create_link" not in self._stubs:
814 self._stubs["create_link"] = self.grpc_channel.unary_unary(
815 "/google.logging.v2.ConfigServiceV2/CreateLink",
816 request_serializer=logging_config.CreateLinkRequest.serialize,
817 response_deserializer=operations_pb2.Operation.FromString,
818 )
819 return self._stubs["create_link"]
820
821 @property
822 def delete_link(
823 self,
824 ) -> Callable[
825 [logging_config.DeleteLinkRequest], Awaitable[operations_pb2.Operation]
826 ]:
827 r"""Return a callable for the delete link method over gRPC.
828
829 Deletes a link. This will also delete the
830 corresponding BigQuery linked dataset.
831
832 Returns:
833 Callable[[~.DeleteLinkRequest],
834 Awaitable[~.Operation]]:
835 A function that, when called, will call the underlying RPC
836 on the server.
837 """
838 # Generate a "stub function" on-the-fly which will actually make
839 # the request.
840 # gRPC handles serialization and deserialization, so we just need
841 # to pass in the functions for each.
842 if "delete_link" not in self._stubs:
843 self._stubs["delete_link"] = self.grpc_channel.unary_unary(
844 "/google.logging.v2.ConfigServiceV2/DeleteLink",
845 request_serializer=logging_config.DeleteLinkRequest.serialize,
846 response_deserializer=operations_pb2.Operation.FromString,
847 )
848 return self._stubs["delete_link"]
849
850 @property
851 def list_links(
852 self,
853 ) -> Callable[
854 [logging_config.ListLinksRequest], Awaitable[logging_config.ListLinksResponse]
855 ]:
856 r"""Return a callable for the list links method over gRPC.
857
858 Lists links.
859
860 Returns:
861 Callable[[~.ListLinksRequest],
862 Awaitable[~.ListLinksResponse]]:
863 A function that, when called, will call the underlying RPC
864 on the server.
865 """
866 # Generate a "stub function" on-the-fly which will actually make
867 # the request.
868 # gRPC handles serialization and deserialization, so we just need
869 # to pass in the functions for each.
870 if "list_links" not in self._stubs:
871 self._stubs["list_links"] = self.grpc_channel.unary_unary(
872 "/google.logging.v2.ConfigServiceV2/ListLinks",
873 request_serializer=logging_config.ListLinksRequest.serialize,
874 response_deserializer=logging_config.ListLinksResponse.deserialize,
875 )
876 return self._stubs["list_links"]
877
878 @property
879 def get_link(
880 self,
881 ) -> Callable[[logging_config.GetLinkRequest], Awaitable[logging_config.Link]]:
882 r"""Return a callable for the get link method over gRPC.
883
884 Gets a link.
885
886 Returns:
887 Callable[[~.GetLinkRequest],
888 Awaitable[~.Link]]:
889 A function that, when called, will call the underlying RPC
890 on the server.
891 """
892 # Generate a "stub function" on-the-fly which will actually make
893 # the request.
894 # gRPC handles serialization and deserialization, so we just need
895 # to pass in the functions for each.
896 if "get_link" not in self._stubs:
897 self._stubs["get_link"] = self.grpc_channel.unary_unary(
898 "/google.logging.v2.ConfigServiceV2/GetLink",
899 request_serializer=logging_config.GetLinkRequest.serialize,
900 response_deserializer=logging_config.Link.deserialize,
901 )
902 return self._stubs["get_link"]
903
904 @property
905 def list_exclusions(
906 self,
907 ) -> Callable[
908 [logging_config.ListExclusionsRequest],
909 Awaitable[logging_config.ListExclusionsResponse],
910 ]:
911 r"""Return a callable for the list exclusions method over gRPC.
912
913 Lists all the exclusions on the \_Default sink in a parent
914 resource.
915
916 Returns:
917 Callable[[~.ListExclusionsRequest],
918 Awaitable[~.ListExclusionsResponse]]:
919 A function that, when called, will call the underlying RPC
920 on the server.
921 """
922 # Generate a "stub function" on-the-fly which will actually make
923 # the request.
924 # gRPC handles serialization and deserialization, so we just need
925 # to pass in the functions for each.
926 if "list_exclusions" not in self._stubs:
927 self._stubs["list_exclusions"] = self.grpc_channel.unary_unary(
928 "/google.logging.v2.ConfigServiceV2/ListExclusions",
929 request_serializer=logging_config.ListExclusionsRequest.serialize,
930 response_deserializer=logging_config.ListExclusionsResponse.deserialize,
931 )
932 return self._stubs["list_exclusions"]
933
934 @property
935 def get_exclusion(
936 self,
937 ) -> Callable[
938 [logging_config.GetExclusionRequest], Awaitable[logging_config.LogExclusion]
939 ]:
940 r"""Return a callable for the get exclusion method over gRPC.
941
942 Gets the description of an exclusion in the \_Default sink.
943
944 Returns:
945 Callable[[~.GetExclusionRequest],
946 Awaitable[~.LogExclusion]]:
947 A function that, when called, will call the underlying RPC
948 on the server.
949 """
950 # Generate a "stub function" on-the-fly which will actually make
951 # the request.
952 # gRPC handles serialization and deserialization, so we just need
953 # to pass in the functions for each.
954 if "get_exclusion" not in self._stubs:
955 self._stubs["get_exclusion"] = self.grpc_channel.unary_unary(
956 "/google.logging.v2.ConfigServiceV2/GetExclusion",
957 request_serializer=logging_config.GetExclusionRequest.serialize,
958 response_deserializer=logging_config.LogExclusion.deserialize,
959 )
960 return self._stubs["get_exclusion"]
961
962 @property
963 def create_exclusion(
964 self,
965 ) -> Callable[
966 [logging_config.CreateExclusionRequest], Awaitable[logging_config.LogExclusion]
967 ]:
968 r"""Return a callable for the create exclusion method over gRPC.
969
970 Creates a new exclusion in the \_Default sink in a specified
971 parent resource. Only log entries belonging to that resource can
972 be excluded. You can have up to 10 exclusions in a resource.
973
974 Returns:
975 Callable[[~.CreateExclusionRequest],
976 Awaitable[~.LogExclusion]]:
977 A function that, when called, will call the underlying RPC
978 on the server.
979 """
980 # Generate a "stub function" on-the-fly which will actually make
981 # the request.
982 # gRPC handles serialization and deserialization, so we just need
983 # to pass in the functions for each.
984 if "create_exclusion" not in self._stubs:
985 self._stubs["create_exclusion"] = self.grpc_channel.unary_unary(
986 "/google.logging.v2.ConfigServiceV2/CreateExclusion",
987 request_serializer=logging_config.CreateExclusionRequest.serialize,
988 response_deserializer=logging_config.LogExclusion.deserialize,
989 )
990 return self._stubs["create_exclusion"]
991
992 @property
993 def update_exclusion(
994 self,
995 ) -> Callable[
996 [logging_config.UpdateExclusionRequest], Awaitable[logging_config.LogExclusion]
997 ]:
998 r"""Return a callable for the update exclusion method over gRPC.
999
1000 Changes one or more properties of an existing exclusion in the
1001 \_Default sink.
1002
1003 Returns:
1004 Callable[[~.UpdateExclusionRequest],
1005 Awaitable[~.LogExclusion]]:
1006 A function that, when called, will call the underlying RPC
1007 on the server.
1008 """
1009 # Generate a "stub function" on-the-fly which will actually make
1010 # the request.
1011 # gRPC handles serialization and deserialization, so we just need
1012 # to pass in the functions for each.
1013 if "update_exclusion" not in self._stubs:
1014 self._stubs["update_exclusion"] = self.grpc_channel.unary_unary(
1015 "/google.logging.v2.ConfigServiceV2/UpdateExclusion",
1016 request_serializer=logging_config.UpdateExclusionRequest.serialize,
1017 response_deserializer=logging_config.LogExclusion.deserialize,
1018 )
1019 return self._stubs["update_exclusion"]
1020
1021 @property
1022 def delete_exclusion(
1023 self,
1024 ) -> Callable[[logging_config.DeleteExclusionRequest], Awaitable[empty_pb2.Empty]]:
1025 r"""Return a callable for the delete exclusion method over gRPC.
1026
1027 Deletes an exclusion in the \_Default sink.
1028
1029 Returns:
1030 Callable[[~.DeleteExclusionRequest],
1031 Awaitable[~.Empty]]:
1032 A function that, when called, will call the underlying RPC
1033 on the server.
1034 """
1035 # Generate a "stub function" on-the-fly which will actually make
1036 # the request.
1037 # gRPC handles serialization and deserialization, so we just need
1038 # to pass in the functions for each.
1039 if "delete_exclusion" not in self._stubs:
1040 self._stubs["delete_exclusion"] = self.grpc_channel.unary_unary(
1041 "/google.logging.v2.ConfigServiceV2/DeleteExclusion",
1042 request_serializer=logging_config.DeleteExclusionRequest.serialize,
1043 response_deserializer=empty_pb2.Empty.FromString,
1044 )
1045 return self._stubs["delete_exclusion"]
1046
1047 @property
1048 def get_cmek_settings(
1049 self,
1050 ) -> Callable[
1051 [logging_config.GetCmekSettingsRequest], Awaitable[logging_config.CmekSettings]
1052 ]:
1053 r"""Return a callable for the get cmek settings method over gRPC.
1054
1055 Gets the Logging CMEK settings for the given resource.
1056
1057 Note: CMEK for the Log Router can be configured for Google Cloud
1058 projects, folders, organizations and billing accounts. Once
1059 configured for an organization, it applies to all projects and
1060 folders in the Google Cloud organization.
1061
1062 See `Enabling CMEK for Log
1063 Router <https://cloud.google.com/logging/docs/routing/managed-encryption>`__
1064 for more information.
1065
1066 Returns:
1067 Callable[[~.GetCmekSettingsRequest],
1068 Awaitable[~.CmekSettings]]:
1069 A function that, when called, will call the underlying RPC
1070 on the server.
1071 """
1072 # Generate a "stub function" on-the-fly which will actually make
1073 # the request.
1074 # gRPC handles serialization and deserialization, so we just need
1075 # to pass in the functions for each.
1076 if "get_cmek_settings" not in self._stubs:
1077 self._stubs["get_cmek_settings"] = self.grpc_channel.unary_unary(
1078 "/google.logging.v2.ConfigServiceV2/GetCmekSettings",
1079 request_serializer=logging_config.GetCmekSettingsRequest.serialize,
1080 response_deserializer=logging_config.CmekSettings.deserialize,
1081 )
1082 return self._stubs["get_cmek_settings"]
1083
1084 @property
1085 def update_cmek_settings(
1086 self,
1087 ) -> Callable[
1088 [logging_config.UpdateCmekSettingsRequest],
1089 Awaitable[logging_config.CmekSettings],
1090 ]:
1091 r"""Return a callable for the update cmek settings method over gRPC.
1092
1093 Updates the Log Router CMEK settings for the given resource.
1094
1095 Note: CMEK for the Log Router can currently only be configured
1096 for Google Cloud organizations. Once configured, it applies to
1097 all projects and folders in the Google Cloud organization.
1098
1099 [UpdateCmekSettings][google.logging.v2.ConfigServiceV2.UpdateCmekSettings]
1100 will fail if 1) ``kms_key_name`` is invalid, or 2) the
1101 associated service account does not have the required
1102 ``roles/cloudkms.cryptoKeyEncrypterDecrypter`` role assigned for
1103 the key, or 3) access to the key is disabled.
1104
1105 See `Enabling CMEK for Log
1106 Router <https://cloud.google.com/logging/docs/routing/managed-encryption>`__
1107 for more information.
1108
1109 Returns:
1110 Callable[[~.UpdateCmekSettingsRequest],
1111 Awaitable[~.CmekSettings]]:
1112 A function that, when called, will call the underlying RPC
1113 on the server.
1114 """
1115 # Generate a "stub function" on-the-fly which will actually make
1116 # the request.
1117 # gRPC handles serialization and deserialization, so we just need
1118 # to pass in the functions for each.
1119 if "update_cmek_settings" not in self._stubs:
1120 self._stubs["update_cmek_settings"] = self.grpc_channel.unary_unary(
1121 "/google.logging.v2.ConfigServiceV2/UpdateCmekSettings",
1122 request_serializer=logging_config.UpdateCmekSettingsRequest.serialize,
1123 response_deserializer=logging_config.CmekSettings.deserialize,
1124 )
1125 return self._stubs["update_cmek_settings"]
1126
1127 @property
1128 def get_settings(
1129 self,
1130 ) -> Callable[
1131 [logging_config.GetSettingsRequest], Awaitable[logging_config.Settings]
1132 ]:
1133 r"""Return a callable for the get settings method over gRPC.
1134
1135 Gets the Log Router settings for the given resource.
1136
1137 Note: Settings for the Log Router can be get for Google Cloud
1138 projects, folders, organizations and billing accounts. Currently
1139 it can only be configured for organizations. Once configured for
1140 an organization, it applies to all projects and folders in the
1141 Google Cloud organization.
1142
1143 See `Enabling CMEK for Log
1144 Router <https://cloud.google.com/logging/docs/routing/managed-encryption>`__
1145 for more information.
1146
1147 Returns:
1148 Callable[[~.GetSettingsRequest],
1149 Awaitable[~.Settings]]:
1150 A function that, when called, will call the underlying RPC
1151 on the server.
1152 """
1153 # Generate a "stub function" on-the-fly which will actually make
1154 # the request.
1155 # gRPC handles serialization and deserialization, so we just need
1156 # to pass in the functions for each.
1157 if "get_settings" not in self._stubs:
1158 self._stubs["get_settings"] = self.grpc_channel.unary_unary(
1159 "/google.logging.v2.ConfigServiceV2/GetSettings",
1160 request_serializer=logging_config.GetSettingsRequest.serialize,
1161 response_deserializer=logging_config.Settings.deserialize,
1162 )
1163 return self._stubs["get_settings"]
1164
1165 @property
1166 def update_settings(
1167 self,
1168 ) -> Callable[
1169 [logging_config.UpdateSettingsRequest], Awaitable[logging_config.Settings]
1170 ]:
1171 r"""Return a callable for the update settings method over gRPC.
1172
1173 Updates the Log Router settings for the given resource.
1174
1175 Note: Settings for the Log Router can currently only be
1176 configured for Google Cloud organizations. Once configured, it
1177 applies to all projects and folders in the Google Cloud
1178 organization.
1179
1180 [UpdateSettings][google.logging.v2.ConfigServiceV2.UpdateSettings]
1181 will fail if 1) ``kms_key_name`` is invalid, or 2) the
1182 associated service account does not have the required
1183 ``roles/cloudkms.cryptoKeyEncrypterDecrypter`` role assigned for
1184 the key, or 3) access to the key is disabled. 4) ``location_id``
1185 is not supported by Logging. 5) ``location_id`` violate
1186 OrgPolicy.
1187
1188 See `Enabling CMEK for Log
1189 Router <https://cloud.google.com/logging/docs/routing/managed-encryption>`__
1190 for more information.
1191
1192 Returns:
1193 Callable[[~.UpdateSettingsRequest],
1194 Awaitable[~.Settings]]:
1195 A function that, when called, will call the underlying RPC
1196 on the server.
1197 """
1198 # Generate a "stub function" on-the-fly which will actually make
1199 # the request.
1200 # gRPC handles serialization and deserialization, so we just need
1201 # to pass in the functions for each.
1202 if "update_settings" not in self._stubs:
1203 self._stubs["update_settings"] = self.grpc_channel.unary_unary(
1204 "/google.logging.v2.ConfigServiceV2/UpdateSettings",
1205 request_serializer=logging_config.UpdateSettingsRequest.serialize,
1206 response_deserializer=logging_config.Settings.deserialize,
1207 )
1208 return self._stubs["update_settings"]
1209
1210 @property
1211 def copy_log_entries(
1212 self,
1213 ) -> Callable[
1214 [logging_config.CopyLogEntriesRequest], Awaitable[operations_pb2.Operation]
1215 ]:
1216 r"""Return a callable for the copy log entries method over gRPC.
1217
1218 Copies a set of log entries from a log bucket to a
1219 Cloud Storage bucket.
1220
1221 Returns:
1222 Callable[[~.CopyLogEntriesRequest],
1223 Awaitable[~.Operation]]:
1224 A function that, when called, will call the underlying RPC
1225 on the server.
1226 """
1227 # Generate a "stub function" on-the-fly which will actually make
1228 # the request.
1229 # gRPC handles serialization and deserialization, so we just need
1230 # to pass in the functions for each.
1231 if "copy_log_entries" not in self._stubs:
1232 self._stubs["copy_log_entries"] = self.grpc_channel.unary_unary(
1233 "/google.logging.v2.ConfigServiceV2/CopyLogEntries",
1234 request_serializer=logging_config.CopyLogEntriesRequest.serialize,
1235 response_deserializer=operations_pb2.Operation.FromString,
1236 )
1237 return self._stubs["copy_log_entries"]
1238
1239 def close(self):
1240 return self.grpc_channel.close()
1241
1242 @property
1243 def cancel_operation(
1244 self,
1245 ) -> Callable[[operations_pb2.CancelOperationRequest], None]:
1246 r"""Return a callable for the cancel_operation method over gRPC."""
1247 # Generate a "stub function" on-the-fly which will actually make
1248 # the request.
1249 # gRPC handles serialization and deserialization, so we just need
1250 # to pass in the functions for each.
1251 if "cancel_operation" not in self._stubs:
1252 self._stubs["cancel_operation"] = self.grpc_channel.unary_unary(
1253 "/google.longrunning.Operations/CancelOperation",
1254 request_serializer=operations_pb2.CancelOperationRequest.SerializeToString,
1255 response_deserializer=None,
1256 )
1257 return self._stubs["cancel_operation"]
1258
1259 @property
1260 def get_operation(
1261 self,
1262 ) -> Callable[[operations_pb2.GetOperationRequest], operations_pb2.Operation]:
1263 r"""Return a callable for the get_operation method over gRPC."""
1264 # Generate a "stub function" on-the-fly which will actually make
1265 # the request.
1266 # gRPC handles serialization and deserialization, so we just need
1267 # to pass in the functions for each.
1268 if "get_operation" not in self._stubs:
1269 self._stubs["get_operation"] = self.grpc_channel.unary_unary(
1270 "/google.longrunning.Operations/GetOperation",
1271 request_serializer=operations_pb2.GetOperationRequest.SerializeToString,
1272 response_deserializer=operations_pb2.Operation.FromString,
1273 )
1274 return self._stubs["get_operation"]
1275
1276 @property
1277 def list_operations(
1278 self,
1279 ) -> Callable[
1280 [operations_pb2.ListOperationsRequest], operations_pb2.ListOperationsResponse
1281 ]:
1282 r"""Return a callable for the list_operations method over gRPC."""
1283 # Generate a "stub function" on-the-fly which will actually make
1284 # the request.
1285 # gRPC handles serialization and deserialization, so we just need
1286 # to pass in the functions for each.
1287 if "list_operations" not in self._stubs:
1288 self._stubs["list_operations"] = self.grpc_channel.unary_unary(
1289 "/google.longrunning.Operations/ListOperations",
1290 request_serializer=operations_pb2.ListOperationsRequest.SerializeToString,
1291 response_deserializer=operations_pb2.ListOperationsResponse.FromString,
1292 )
1293 return self._stubs["list_operations"]
1294
1295
1296__all__ = ("ConfigServiceV2GrpcAsyncIOTransport",)