1# -*- coding: utf-8 -*-
2# Copyright 2025 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 logging as std_logging
17from collections import OrderedDict
18import re
19from typing import (
20 Dict,
21 Callable,
22 Mapping,
23 MutableMapping,
24 MutableSequence,
25 Optional,
26 AsyncIterable,
27 Awaitable,
28 AsyncIterator,
29 Sequence,
30 Tuple,
31 Type,
32 Union,
33)
34
35from google.cloud.firestore_v1 import gapic_version as package_version
36
37from google.api_core.client_options import ClientOptions
38from google.api_core import exceptions as core_exceptions
39from google.api_core import gapic_v1
40from google.api_core import retry_async as retries
41from google.auth import credentials as ga_credentials # type: ignore
42from google.oauth2 import service_account # type: ignore
43import google.protobuf
44
45
46try:
47 OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault, None]
48except AttributeError: # pragma: NO COVER
49 OptionalRetry = Union[retries.AsyncRetry, object, None] # type: ignore
50
51from google.cloud.firestore_v1.services.firestore import pagers
52from google.cloud.firestore_v1.types import aggregation_result
53from google.cloud.firestore_v1.types import common
54from google.cloud.firestore_v1.types import document
55from google.cloud.firestore_v1.types import document as gf_document
56from google.cloud.firestore_v1.types import firestore
57from google.cloud.firestore_v1.types import query
58from google.cloud.firestore_v1.types import query_profile
59from google.cloud.firestore_v1.types import write as gf_write
60from google.cloud.location import locations_pb2 # type: ignore
61from google.longrunning import operations_pb2 # type: ignore
62from google.protobuf import timestamp_pb2 # type: ignore
63from google.rpc import status_pb2 # type: ignore
64from .transports.base import FirestoreTransport, DEFAULT_CLIENT_INFO
65from .transports.grpc_asyncio import FirestoreGrpcAsyncIOTransport
66from .client import FirestoreClient
67
68try:
69 from google.api_core import client_logging # type: ignore
70
71 CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER
72except ImportError: # pragma: NO COVER
73 CLIENT_LOGGING_SUPPORTED = False
74
75_LOGGER = std_logging.getLogger(__name__)
76
77
78class FirestoreAsyncClient:
79 """The Cloud Firestore service.
80
81 Cloud Firestore is a fast, fully managed, serverless,
82 cloud-native NoSQL document database that simplifies storing,
83 syncing, and querying data for your mobile, web, and IoT apps at
84 global scale. Its client libraries provide live synchronization
85 and offline support, while its security features and
86 integrations with Firebase and Google Cloud Platform accelerate
87 building truly serverless apps.
88 """
89
90 _client: FirestoreClient
91
92 # Copy defaults from the synchronous client for use here.
93 # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead.
94 DEFAULT_ENDPOINT = FirestoreClient.DEFAULT_ENDPOINT
95 DEFAULT_MTLS_ENDPOINT = FirestoreClient.DEFAULT_MTLS_ENDPOINT
96 _DEFAULT_ENDPOINT_TEMPLATE = FirestoreClient._DEFAULT_ENDPOINT_TEMPLATE
97 _DEFAULT_UNIVERSE = FirestoreClient._DEFAULT_UNIVERSE
98
99 common_billing_account_path = staticmethod(
100 FirestoreClient.common_billing_account_path
101 )
102 parse_common_billing_account_path = staticmethod(
103 FirestoreClient.parse_common_billing_account_path
104 )
105 common_folder_path = staticmethod(FirestoreClient.common_folder_path)
106 parse_common_folder_path = staticmethod(FirestoreClient.parse_common_folder_path)
107 common_organization_path = staticmethod(FirestoreClient.common_organization_path)
108 parse_common_organization_path = staticmethod(
109 FirestoreClient.parse_common_organization_path
110 )
111 common_project_path = staticmethod(FirestoreClient.common_project_path)
112 parse_common_project_path = staticmethod(FirestoreClient.parse_common_project_path)
113 common_location_path = staticmethod(FirestoreClient.common_location_path)
114 parse_common_location_path = staticmethod(
115 FirestoreClient.parse_common_location_path
116 )
117
118 @classmethod
119 def from_service_account_info(cls, info: dict, *args, **kwargs):
120 """Creates an instance of this client using the provided credentials
121 info.
122
123 Args:
124 info (dict): The service account private key info.
125 args: Additional arguments to pass to the constructor.
126 kwargs: Additional arguments to pass to the constructor.
127
128 Returns:
129 FirestoreAsyncClient: The constructed client.
130 """
131 return FirestoreClient.from_service_account_info.__func__(FirestoreAsyncClient, info, *args, **kwargs) # type: ignore
132
133 @classmethod
134 def from_service_account_file(cls, filename: str, *args, **kwargs):
135 """Creates an instance of this client using the provided credentials
136 file.
137
138 Args:
139 filename (str): The path to the service account private key json
140 file.
141 args: Additional arguments to pass to the constructor.
142 kwargs: Additional arguments to pass to the constructor.
143
144 Returns:
145 FirestoreAsyncClient: The constructed client.
146 """
147 return FirestoreClient.from_service_account_file.__func__(FirestoreAsyncClient, filename, *args, **kwargs) # type: ignore
148
149 from_service_account_json = from_service_account_file
150
151 @classmethod
152 def get_mtls_endpoint_and_cert_source(
153 cls, client_options: Optional[ClientOptions] = None
154 ):
155 """Return the API endpoint and client cert source for mutual TLS.
156
157 The client cert source is determined in the following order:
158 (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the
159 client cert source is None.
160 (2) if `client_options.client_cert_source` is provided, use the provided one; if the
161 default client cert source exists, use the default one; otherwise the client cert
162 source is None.
163
164 The API endpoint is determined in the following order:
165 (1) if `client_options.api_endpoint` if provided, use the provided one.
166 (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the
167 default mTLS endpoint; if the environment variable is "never", use the default API
168 endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise
169 use the default API endpoint.
170
171 More details can be found at https://google.aip.dev/auth/4114.
172
173 Args:
174 client_options (google.api_core.client_options.ClientOptions): Custom options for the
175 client. Only the `api_endpoint` and `client_cert_source` properties may be used
176 in this method.
177
178 Returns:
179 Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the
180 client cert source to use.
181
182 Raises:
183 google.auth.exceptions.MutualTLSChannelError: If any errors happen.
184 """
185 return FirestoreClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore
186
187 @property
188 def transport(self) -> FirestoreTransport:
189 """Returns the transport used by the client instance.
190
191 Returns:
192 FirestoreTransport: The transport used by the client instance.
193 """
194 return self._client.transport
195
196 @property
197 def api_endpoint(self):
198 """Return the API endpoint used by the client instance.
199
200 Returns:
201 str: The API endpoint used by the client instance.
202 """
203 return self._client._api_endpoint
204
205 @property
206 def universe_domain(self) -> str:
207 """Return the universe domain used by the client instance.
208
209 Returns:
210 str: The universe domain used
211 by the client instance.
212 """
213 return self._client._universe_domain
214
215 get_transport_class = FirestoreClient.get_transport_class
216
217 def __init__(
218 self,
219 *,
220 credentials: Optional[ga_credentials.Credentials] = None,
221 transport: Optional[
222 Union[str, FirestoreTransport, Callable[..., FirestoreTransport]]
223 ] = "grpc_asyncio",
224 client_options: Optional[ClientOptions] = None,
225 client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
226 ) -> None:
227 """Instantiates the firestore async client.
228
229 Args:
230 credentials (Optional[google.auth.credentials.Credentials]): The
231 authorization credentials to attach to requests. These
232 credentials identify the application to the service; if none
233 are specified, the client will attempt to ascertain the
234 credentials from the environment.
235 transport (Optional[Union[str,FirestoreTransport,Callable[..., FirestoreTransport]]]):
236 The transport to use, or a Callable that constructs and returns a new transport to use.
237 If a Callable is given, it will be called with the same set of initialization
238 arguments as used in the FirestoreTransport constructor.
239 If set to None, a transport is chosen automatically.
240 client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]):
241 Custom options for the client.
242
243 1. The ``api_endpoint`` property can be used to override the
244 default endpoint provided by the client when ``transport`` is
245 not explicitly provided. Only if this property is not set and
246 ``transport`` was not explicitly provided, the endpoint is
247 determined by the GOOGLE_API_USE_MTLS_ENDPOINT environment
248 variable, which have one of the following values:
249 "always" (always use the default mTLS endpoint), "never" (always
250 use the default regular endpoint) and "auto" (auto-switch to the
251 default mTLS endpoint if client certificate is present; this is
252 the default value).
253
254 2. If the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable
255 is "true", then the ``client_cert_source`` property can be used
256 to provide a client certificate for mTLS transport. If
257 not provided, the default SSL client certificate will be used if
258 present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not
259 set, no client certificate will be used.
260
261 3. The ``universe_domain`` property can be used to override the
262 default "googleapis.com" universe. Note that ``api_endpoint``
263 property still takes precedence; and ``universe_domain`` is
264 currently not supported for mTLS.
265
266 client_info (google.api_core.gapic_v1.client_info.ClientInfo):
267 The client info used to send a user-agent string along with
268 API requests. If ``None``, then default info will be used.
269 Generally, you only need to set this if you're developing
270 your own client library.
271
272 Raises:
273 google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
274 creation failed for any reason.
275 """
276 self._client = FirestoreClient(
277 credentials=credentials,
278 transport=transport,
279 client_options=client_options,
280 client_info=client_info,
281 )
282
283 if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
284 std_logging.DEBUG
285 ): # pragma: NO COVER
286 _LOGGER.debug(
287 "Created client `google.firestore_v1.FirestoreAsyncClient`.",
288 extra={
289 "serviceName": "google.firestore.v1.Firestore",
290 "universeDomain": getattr(
291 self._client._transport._credentials, "universe_domain", ""
292 ),
293 "credentialsType": f"{type(self._client._transport._credentials).__module__}.{type(self._client._transport._credentials).__qualname__}",
294 "credentialsInfo": getattr(
295 self.transport._credentials, "get_cred_info", lambda: None
296 )(),
297 }
298 if hasattr(self._client._transport, "_credentials")
299 else {
300 "serviceName": "google.firestore.v1.Firestore",
301 "credentialsType": None,
302 },
303 )
304
305 async def get_document(
306 self,
307 request: Optional[Union[firestore.GetDocumentRequest, dict]] = None,
308 *,
309 retry: OptionalRetry = gapic_v1.method.DEFAULT,
310 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
311 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
312 ) -> document.Document:
313 r"""Gets a single document.
314
315 .. code-block:: python
316
317 # This snippet has been automatically generated and should be regarded as a
318 # code template only.
319 # It will require modifications to work:
320 # - It may require correct/in-range values for request initialization.
321 # - It may require specifying regional endpoints when creating the service
322 # client as shown in:
323 # https://googleapis.dev/python/google-api-core/latest/client_options.html
324 from google.cloud import firestore_v1
325
326 async def sample_get_document():
327 # Create a client
328 client = firestore_v1.FirestoreAsyncClient()
329
330 # Initialize request argument(s)
331 request = firestore_v1.GetDocumentRequest(
332 transaction=b'transaction_blob',
333 name="name_value",
334 )
335
336 # Make the request
337 response = await client.get_document(request=request)
338
339 # Handle the response
340 print(response)
341
342 Args:
343 request (Optional[Union[google.cloud.firestore_v1.types.GetDocumentRequest, dict]]):
344 The request object. The request for
345 [Firestore.GetDocument][google.firestore.v1.Firestore.GetDocument].
346 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
347 should be retried.
348 timeout (float): The timeout for this request.
349 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
350 sent along with the request as metadata. Normally, each value must be of type `str`,
351 but for metadata keys ending with the suffix `-bin`, the corresponding values must
352 be of type `bytes`.
353
354 Returns:
355 google.cloud.firestore_v1.types.Document:
356 A Firestore document.
357
358 Must not exceed 1 MiB - 4 bytes.
359
360 """
361 # Create or coerce a protobuf request object.
362 # - Use the request object if provided (there's no risk of modifying the input as
363 # there are no flattened fields), or create one.
364 if not isinstance(request, firestore.GetDocumentRequest):
365 request = firestore.GetDocumentRequest(request)
366
367 # Wrap the RPC method; this adds retry and timeout information,
368 # and friendly error handling.
369 rpc = self._client._transport._wrapped_methods[
370 self._client._transport.get_document
371 ]
372
373 # Certain fields should be provided within the metadata header;
374 # add these here.
375 metadata = tuple(metadata) + (
376 gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)),
377 )
378
379 # Validate the universe domain.
380 self._client._validate_universe_domain()
381
382 # Send the request.
383 response = await rpc(
384 request,
385 retry=retry,
386 timeout=timeout,
387 metadata=metadata,
388 )
389
390 # Done; return the response.
391 return response
392
393 async def list_documents(
394 self,
395 request: Optional[Union[firestore.ListDocumentsRequest, dict]] = None,
396 *,
397 retry: OptionalRetry = gapic_v1.method.DEFAULT,
398 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
399 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
400 ) -> pagers.ListDocumentsAsyncPager:
401 r"""Lists documents.
402
403 .. code-block:: python
404
405 # This snippet has been automatically generated and should be regarded as a
406 # code template only.
407 # It will require modifications to work:
408 # - It may require correct/in-range values for request initialization.
409 # - It may require specifying regional endpoints when creating the service
410 # client as shown in:
411 # https://googleapis.dev/python/google-api-core/latest/client_options.html
412 from google.cloud import firestore_v1
413
414 async def sample_list_documents():
415 # Create a client
416 client = firestore_v1.FirestoreAsyncClient()
417
418 # Initialize request argument(s)
419 request = firestore_v1.ListDocumentsRequest(
420 transaction=b'transaction_blob',
421 parent="parent_value",
422 )
423
424 # Make the request
425 page_result = client.list_documents(request=request)
426
427 # Handle the response
428 async for response in page_result:
429 print(response)
430
431 Args:
432 request (Optional[Union[google.cloud.firestore_v1.types.ListDocumentsRequest, dict]]):
433 The request object. The request for
434 [Firestore.ListDocuments][google.firestore.v1.Firestore.ListDocuments].
435 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
436 should be retried.
437 timeout (float): The timeout for this request.
438 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
439 sent along with the request as metadata. Normally, each value must be of type `str`,
440 but for metadata keys ending with the suffix `-bin`, the corresponding values must
441 be of type `bytes`.
442
443 Returns:
444 google.cloud.firestore_v1.services.firestore.pagers.ListDocumentsAsyncPager:
445 The response for
446 [Firestore.ListDocuments][google.firestore.v1.Firestore.ListDocuments].
447
448 Iterating over this object will yield results and
449 resolve additional pages automatically.
450
451 """
452 # Create or coerce a protobuf request object.
453 # - Use the request object if provided (there's no risk of modifying the input as
454 # there are no flattened fields), or create one.
455 if not isinstance(request, firestore.ListDocumentsRequest):
456 request = firestore.ListDocumentsRequest(request)
457
458 # Wrap the RPC method; this adds retry and timeout information,
459 # and friendly error handling.
460 rpc = self._client._transport._wrapped_methods[
461 self._client._transport.list_documents
462 ]
463
464 # Certain fields should be provided within the metadata header;
465 # add these here.
466 metadata = tuple(metadata) + (
467 gapic_v1.routing_header.to_grpc_metadata(
468 (
469 ("parent", request.parent),
470 ("collection_id", request.collection_id),
471 )
472 ),
473 )
474
475 # Validate the universe domain.
476 self._client._validate_universe_domain()
477
478 # Send the request.
479 response = await rpc(
480 request,
481 retry=retry,
482 timeout=timeout,
483 metadata=metadata,
484 )
485
486 # This method is paged; wrap the response in a pager, which provides
487 # an `__aiter__` convenience method.
488 response = pagers.ListDocumentsAsyncPager(
489 method=rpc,
490 request=request,
491 response=response,
492 retry=retry,
493 timeout=timeout,
494 metadata=metadata,
495 )
496
497 # Done; return the response.
498 return response
499
500 async def update_document(
501 self,
502 request: Optional[Union[firestore.UpdateDocumentRequest, dict]] = None,
503 *,
504 document: Optional[gf_document.Document] = None,
505 update_mask: Optional[common.DocumentMask] = None,
506 retry: OptionalRetry = gapic_v1.method.DEFAULT,
507 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
508 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
509 ) -> gf_document.Document:
510 r"""Updates or inserts a document.
511
512 .. code-block:: python
513
514 # This snippet has been automatically generated and should be regarded as a
515 # code template only.
516 # It will require modifications to work:
517 # - It may require correct/in-range values for request initialization.
518 # - It may require specifying regional endpoints when creating the service
519 # client as shown in:
520 # https://googleapis.dev/python/google-api-core/latest/client_options.html
521 from google.cloud import firestore_v1
522
523 async def sample_update_document():
524 # Create a client
525 client = firestore_v1.FirestoreAsyncClient()
526
527 # Initialize request argument(s)
528 request = firestore_v1.UpdateDocumentRequest(
529 )
530
531 # Make the request
532 response = await client.update_document(request=request)
533
534 # Handle the response
535 print(response)
536
537 Args:
538 request (Optional[Union[google.cloud.firestore_v1.types.UpdateDocumentRequest, dict]]):
539 The request object. The request for
540 [Firestore.UpdateDocument][google.firestore.v1.Firestore.UpdateDocument].
541 document (:class:`google.cloud.firestore_v1.types.Document`):
542 Required. The updated document.
543 Creates the document if it does not
544 already exist.
545
546 This corresponds to the ``document`` field
547 on the ``request`` instance; if ``request`` is provided, this
548 should not be set.
549 update_mask (:class:`google.cloud.firestore_v1.types.DocumentMask`):
550 The fields to update.
551 None of the field paths in the mask may
552 contain a reserved name.
553
554 If the document exists on the server and
555 has fields not referenced in the mask,
556 they are left unchanged.
557 Fields referenced in the mask, but not
558 present in the input document, are
559 deleted from the document on the server.
560
561 This corresponds to the ``update_mask`` field
562 on the ``request`` instance; if ``request`` is provided, this
563 should not be set.
564 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
565 should be retried.
566 timeout (float): The timeout for this request.
567 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
568 sent along with the request as metadata. Normally, each value must be of type `str`,
569 but for metadata keys ending with the suffix `-bin`, the corresponding values must
570 be of type `bytes`.
571
572 Returns:
573 google.cloud.firestore_v1.types.Document:
574 A Firestore document.
575
576 Must not exceed 1 MiB - 4 bytes.
577
578 """
579 # Create or coerce a protobuf request object.
580 # - Quick check: If we got a request object, we should *not* have
581 # gotten any keyword arguments that map to the request.
582 flattened_params = [document, update_mask]
583 has_flattened_params = (
584 len([param for param in flattened_params if param is not None]) > 0
585 )
586 if request is not None and has_flattened_params:
587 raise ValueError(
588 "If the `request` argument is set, then none of "
589 "the individual field arguments should be set."
590 )
591
592 # - Use the request object if provided (there's no risk of modifying the input as
593 # there are no flattened fields), or create one.
594 if not isinstance(request, firestore.UpdateDocumentRequest):
595 request = firestore.UpdateDocumentRequest(request)
596
597 # If we have keyword arguments corresponding to fields on the
598 # request, apply these.
599 if document is not None:
600 request.document = document
601 if update_mask is not None:
602 request.update_mask = update_mask
603
604 # Wrap the RPC method; this adds retry and timeout information,
605 # and friendly error handling.
606 rpc = self._client._transport._wrapped_methods[
607 self._client._transport.update_document
608 ]
609
610 # Certain fields should be provided within the metadata header;
611 # add these here.
612 metadata = tuple(metadata) + (
613 gapic_v1.routing_header.to_grpc_metadata(
614 (("document.name", request.document.name),)
615 ),
616 )
617
618 # Validate the universe domain.
619 self._client._validate_universe_domain()
620
621 # Send the request.
622 response = await rpc(
623 request,
624 retry=retry,
625 timeout=timeout,
626 metadata=metadata,
627 )
628
629 # Done; return the response.
630 return response
631
632 async def delete_document(
633 self,
634 request: Optional[Union[firestore.DeleteDocumentRequest, dict]] = None,
635 *,
636 name: Optional[str] = None,
637 retry: OptionalRetry = gapic_v1.method.DEFAULT,
638 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
639 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
640 ) -> None:
641 r"""Deletes a document.
642
643 .. code-block:: python
644
645 # This snippet has been automatically generated and should be regarded as a
646 # code template only.
647 # It will require modifications to work:
648 # - It may require correct/in-range values for request initialization.
649 # - It may require specifying regional endpoints when creating the service
650 # client as shown in:
651 # https://googleapis.dev/python/google-api-core/latest/client_options.html
652 from google.cloud import firestore_v1
653
654 async def sample_delete_document():
655 # Create a client
656 client = firestore_v1.FirestoreAsyncClient()
657
658 # Initialize request argument(s)
659 request = firestore_v1.DeleteDocumentRequest(
660 name="name_value",
661 )
662
663 # Make the request
664 await client.delete_document(request=request)
665
666 Args:
667 request (Optional[Union[google.cloud.firestore_v1.types.DeleteDocumentRequest, dict]]):
668 The request object. The request for
669 [Firestore.DeleteDocument][google.firestore.v1.Firestore.DeleteDocument].
670 name (:class:`str`):
671 Required. The resource name of the Document to delete.
672 In the format:
673 ``projects/{project_id}/databases/{database_id}/documents/{document_path}``.
674
675 This corresponds to the ``name`` field
676 on the ``request`` instance; if ``request`` is provided, this
677 should not be set.
678 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
679 should be retried.
680 timeout (float): The timeout for this request.
681 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
682 sent along with the request as metadata. Normally, each value must be of type `str`,
683 but for metadata keys ending with the suffix `-bin`, the corresponding values must
684 be of type `bytes`.
685 """
686 # Create or coerce a protobuf request object.
687 # - Quick check: If we got a request object, we should *not* have
688 # gotten any keyword arguments that map to the request.
689 flattened_params = [name]
690 has_flattened_params = (
691 len([param for param in flattened_params if param is not None]) > 0
692 )
693 if request is not None and has_flattened_params:
694 raise ValueError(
695 "If the `request` argument is set, then none of "
696 "the individual field arguments should be set."
697 )
698
699 # - Use the request object if provided (there's no risk of modifying the input as
700 # there are no flattened fields), or create one.
701 if not isinstance(request, firestore.DeleteDocumentRequest):
702 request = firestore.DeleteDocumentRequest(request)
703
704 # If we have keyword arguments corresponding to fields on the
705 # request, apply these.
706 if name is not None:
707 request.name = name
708
709 # Wrap the RPC method; this adds retry and timeout information,
710 # and friendly error handling.
711 rpc = self._client._transport._wrapped_methods[
712 self._client._transport.delete_document
713 ]
714
715 # Certain fields should be provided within the metadata header;
716 # add these here.
717 metadata = tuple(metadata) + (
718 gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)),
719 )
720
721 # Validate the universe domain.
722 self._client._validate_universe_domain()
723
724 # Send the request.
725 await rpc(
726 request,
727 retry=retry,
728 timeout=timeout,
729 metadata=metadata,
730 )
731
732 def batch_get_documents(
733 self,
734 request: Optional[Union[firestore.BatchGetDocumentsRequest, dict]] = None,
735 *,
736 retry: OptionalRetry = gapic_v1.method.DEFAULT,
737 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
738 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
739 ) -> Awaitable[AsyncIterable[firestore.BatchGetDocumentsResponse]]:
740 r"""Gets multiple documents.
741
742 Documents returned by this method are not guaranteed to
743 be returned in the same order that they were requested.
744
745 .. code-block:: python
746
747 # This snippet has been automatically generated and should be regarded as a
748 # code template only.
749 # It will require modifications to work:
750 # - It may require correct/in-range values for request initialization.
751 # - It may require specifying regional endpoints when creating the service
752 # client as shown in:
753 # https://googleapis.dev/python/google-api-core/latest/client_options.html
754 from google.cloud import firestore_v1
755
756 async def sample_batch_get_documents():
757 # Create a client
758 client = firestore_v1.FirestoreAsyncClient()
759
760 # Initialize request argument(s)
761 request = firestore_v1.BatchGetDocumentsRequest(
762 transaction=b'transaction_blob',
763 database="database_value",
764 )
765
766 # Make the request
767 stream = await client.batch_get_documents(request=request)
768
769 # Handle the response
770 async for response in stream:
771 print(response)
772
773 Args:
774 request (Optional[Union[google.cloud.firestore_v1.types.BatchGetDocumentsRequest, dict]]):
775 The request object. The request for
776 [Firestore.BatchGetDocuments][google.firestore.v1.Firestore.BatchGetDocuments].
777 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
778 should be retried.
779 timeout (float): The timeout for this request.
780 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
781 sent along with the request as metadata. Normally, each value must be of type `str`,
782 but for metadata keys ending with the suffix `-bin`, the corresponding values must
783 be of type `bytes`.
784
785 Returns:
786 AsyncIterable[google.cloud.firestore_v1.types.BatchGetDocumentsResponse]:
787 The streamed response for
788 [Firestore.BatchGetDocuments][google.firestore.v1.Firestore.BatchGetDocuments].
789
790 """
791 # Create or coerce a protobuf request object.
792 # - Use the request object if provided (there's no risk of modifying the input as
793 # there are no flattened fields), or create one.
794 if not isinstance(request, firestore.BatchGetDocumentsRequest):
795 request = firestore.BatchGetDocumentsRequest(request)
796
797 # Wrap the RPC method; this adds retry and timeout information,
798 # and friendly error handling.
799 rpc = self._client._transport._wrapped_methods[
800 self._client._transport.batch_get_documents
801 ]
802
803 # Certain fields should be provided within the metadata header;
804 # add these here.
805 metadata = tuple(metadata) + (
806 gapic_v1.routing_header.to_grpc_metadata((("database", request.database),)),
807 )
808
809 # Validate the universe domain.
810 self._client._validate_universe_domain()
811
812 # Send the request.
813 response = rpc(
814 request,
815 retry=retry,
816 timeout=timeout,
817 metadata=metadata,
818 )
819
820 # Done; return the response.
821 return response
822
823 async def begin_transaction(
824 self,
825 request: Optional[Union[firestore.BeginTransactionRequest, dict]] = None,
826 *,
827 database: Optional[str] = None,
828 retry: OptionalRetry = gapic_v1.method.DEFAULT,
829 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
830 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
831 ) -> firestore.BeginTransactionResponse:
832 r"""Starts a new transaction.
833
834 .. code-block:: python
835
836 # This snippet has been automatically generated and should be regarded as a
837 # code template only.
838 # It will require modifications to work:
839 # - It may require correct/in-range values for request initialization.
840 # - It may require specifying regional endpoints when creating the service
841 # client as shown in:
842 # https://googleapis.dev/python/google-api-core/latest/client_options.html
843 from google.cloud import firestore_v1
844
845 async def sample_begin_transaction():
846 # Create a client
847 client = firestore_v1.FirestoreAsyncClient()
848
849 # Initialize request argument(s)
850 request = firestore_v1.BeginTransactionRequest(
851 database="database_value",
852 )
853
854 # Make the request
855 response = await client.begin_transaction(request=request)
856
857 # Handle the response
858 print(response)
859
860 Args:
861 request (Optional[Union[google.cloud.firestore_v1.types.BeginTransactionRequest, dict]]):
862 The request object. The request for
863 [Firestore.BeginTransaction][google.firestore.v1.Firestore.BeginTransaction].
864 database (:class:`str`):
865 Required. The database name. In the format:
866 ``projects/{project_id}/databases/{database_id}``.
867
868 This corresponds to the ``database`` field
869 on the ``request`` instance; if ``request`` is provided, this
870 should not be set.
871 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
872 should be retried.
873 timeout (float): The timeout for this request.
874 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
875 sent along with the request as metadata. Normally, each value must be of type `str`,
876 but for metadata keys ending with the suffix `-bin`, the corresponding values must
877 be of type `bytes`.
878
879 Returns:
880 google.cloud.firestore_v1.types.BeginTransactionResponse:
881 The response for
882 [Firestore.BeginTransaction][google.firestore.v1.Firestore.BeginTransaction].
883
884 """
885 # Create or coerce a protobuf request object.
886 # - Quick check: If we got a request object, we should *not* have
887 # gotten any keyword arguments that map to the request.
888 flattened_params = [database]
889 has_flattened_params = (
890 len([param for param in flattened_params if param is not None]) > 0
891 )
892 if request is not None and has_flattened_params:
893 raise ValueError(
894 "If the `request` argument is set, then none of "
895 "the individual field arguments should be set."
896 )
897
898 # - Use the request object if provided (there's no risk of modifying the input as
899 # there are no flattened fields), or create one.
900 if not isinstance(request, firestore.BeginTransactionRequest):
901 request = firestore.BeginTransactionRequest(request)
902
903 # If we have keyword arguments corresponding to fields on the
904 # request, apply these.
905 if database is not None:
906 request.database = database
907
908 # Wrap the RPC method; this adds retry and timeout information,
909 # and friendly error handling.
910 rpc = self._client._transport._wrapped_methods[
911 self._client._transport.begin_transaction
912 ]
913
914 # Certain fields should be provided within the metadata header;
915 # add these here.
916 metadata = tuple(metadata) + (
917 gapic_v1.routing_header.to_grpc_metadata((("database", request.database),)),
918 )
919
920 # Validate the universe domain.
921 self._client._validate_universe_domain()
922
923 # Send the request.
924 response = await rpc(
925 request,
926 retry=retry,
927 timeout=timeout,
928 metadata=metadata,
929 )
930
931 # Done; return the response.
932 return response
933
934 async def commit(
935 self,
936 request: Optional[Union[firestore.CommitRequest, dict]] = None,
937 *,
938 database: Optional[str] = None,
939 writes: Optional[MutableSequence[gf_write.Write]] = None,
940 retry: OptionalRetry = gapic_v1.method.DEFAULT,
941 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
942 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
943 ) -> firestore.CommitResponse:
944 r"""Commits a transaction, while optionally updating
945 documents.
946
947 .. code-block:: python
948
949 # This snippet has been automatically generated and should be regarded as a
950 # code template only.
951 # It will require modifications to work:
952 # - It may require correct/in-range values for request initialization.
953 # - It may require specifying regional endpoints when creating the service
954 # client as shown in:
955 # https://googleapis.dev/python/google-api-core/latest/client_options.html
956 from google.cloud import firestore_v1
957
958 async def sample_commit():
959 # Create a client
960 client = firestore_v1.FirestoreAsyncClient()
961
962 # Initialize request argument(s)
963 request = firestore_v1.CommitRequest(
964 database="database_value",
965 )
966
967 # Make the request
968 response = await client.commit(request=request)
969
970 # Handle the response
971 print(response)
972
973 Args:
974 request (Optional[Union[google.cloud.firestore_v1.types.CommitRequest, dict]]):
975 The request object. The request for
976 [Firestore.Commit][google.firestore.v1.Firestore.Commit].
977 database (:class:`str`):
978 Required. The database name. In the format:
979 ``projects/{project_id}/databases/{database_id}``.
980
981 This corresponds to the ``database`` field
982 on the ``request`` instance; if ``request`` is provided, this
983 should not be set.
984 writes (:class:`MutableSequence[google.cloud.firestore_v1.types.Write]`):
985 The writes to apply.
986
987 Always executed atomically and in order.
988
989 This corresponds to the ``writes`` field
990 on the ``request`` instance; if ``request`` is provided, this
991 should not be set.
992 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
993 should be retried.
994 timeout (float): The timeout for this request.
995 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
996 sent along with the request as metadata. Normally, each value must be of type `str`,
997 but for metadata keys ending with the suffix `-bin`, the corresponding values must
998 be of type `bytes`.
999
1000 Returns:
1001 google.cloud.firestore_v1.types.CommitResponse:
1002 The response for
1003 [Firestore.Commit][google.firestore.v1.Firestore.Commit].
1004
1005 """
1006 # Create or coerce a protobuf request object.
1007 # - Quick check: If we got a request object, we should *not* have
1008 # gotten any keyword arguments that map to the request.
1009 flattened_params = [database, writes]
1010 has_flattened_params = (
1011 len([param for param in flattened_params if param is not None]) > 0
1012 )
1013 if request is not None and has_flattened_params:
1014 raise ValueError(
1015 "If the `request` argument is set, then none of "
1016 "the individual field arguments should be set."
1017 )
1018
1019 # - Use the request object if provided (there's no risk of modifying the input as
1020 # there are no flattened fields), or create one.
1021 if not isinstance(request, firestore.CommitRequest):
1022 request = firestore.CommitRequest(request)
1023
1024 # If we have keyword arguments corresponding to fields on the
1025 # request, apply these.
1026 if database is not None:
1027 request.database = database
1028 if writes:
1029 request.writes.extend(writes)
1030
1031 # Wrap the RPC method; this adds retry and timeout information,
1032 # and friendly error handling.
1033 rpc = self._client._transport._wrapped_methods[self._client._transport.commit]
1034
1035 # Certain fields should be provided within the metadata header;
1036 # add these here.
1037 metadata = tuple(metadata) + (
1038 gapic_v1.routing_header.to_grpc_metadata((("database", request.database),)),
1039 )
1040
1041 # Validate the universe domain.
1042 self._client._validate_universe_domain()
1043
1044 # Send the request.
1045 response = await rpc(
1046 request,
1047 retry=retry,
1048 timeout=timeout,
1049 metadata=metadata,
1050 )
1051
1052 # Done; return the response.
1053 return response
1054
1055 async def rollback(
1056 self,
1057 request: Optional[Union[firestore.RollbackRequest, dict]] = None,
1058 *,
1059 database: Optional[str] = None,
1060 transaction: Optional[bytes] = None,
1061 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1062 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1063 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1064 ) -> None:
1065 r"""Rolls back a transaction.
1066
1067 .. code-block:: python
1068
1069 # This snippet has been automatically generated and should be regarded as a
1070 # code template only.
1071 # It will require modifications to work:
1072 # - It may require correct/in-range values for request initialization.
1073 # - It may require specifying regional endpoints when creating the service
1074 # client as shown in:
1075 # https://googleapis.dev/python/google-api-core/latest/client_options.html
1076 from google.cloud import firestore_v1
1077
1078 async def sample_rollback():
1079 # Create a client
1080 client = firestore_v1.FirestoreAsyncClient()
1081
1082 # Initialize request argument(s)
1083 request = firestore_v1.RollbackRequest(
1084 database="database_value",
1085 transaction=b'transaction_blob',
1086 )
1087
1088 # Make the request
1089 await client.rollback(request=request)
1090
1091 Args:
1092 request (Optional[Union[google.cloud.firestore_v1.types.RollbackRequest, dict]]):
1093 The request object. The request for
1094 [Firestore.Rollback][google.firestore.v1.Firestore.Rollback].
1095 database (:class:`str`):
1096 Required. The database name. In the format:
1097 ``projects/{project_id}/databases/{database_id}``.
1098
1099 This corresponds to the ``database`` field
1100 on the ``request`` instance; if ``request`` is provided, this
1101 should not be set.
1102 transaction (:class:`bytes`):
1103 Required. The transaction to roll
1104 back.
1105
1106 This corresponds to the ``transaction`` field
1107 on the ``request`` instance; if ``request`` is provided, this
1108 should not be set.
1109 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
1110 should be retried.
1111 timeout (float): The timeout for this request.
1112 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1113 sent along with the request as metadata. Normally, each value must be of type `str`,
1114 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1115 be of type `bytes`.
1116 """
1117 # Create or coerce a protobuf request object.
1118 # - Quick check: If we got a request object, we should *not* have
1119 # gotten any keyword arguments that map to the request.
1120 flattened_params = [database, transaction]
1121 has_flattened_params = (
1122 len([param for param in flattened_params if param is not None]) > 0
1123 )
1124 if request is not None and has_flattened_params:
1125 raise ValueError(
1126 "If the `request` argument is set, then none of "
1127 "the individual field arguments should be set."
1128 )
1129
1130 # - Use the request object if provided (there's no risk of modifying the input as
1131 # there are no flattened fields), or create one.
1132 if not isinstance(request, firestore.RollbackRequest):
1133 request = firestore.RollbackRequest(request)
1134
1135 # If we have keyword arguments corresponding to fields on the
1136 # request, apply these.
1137 if database is not None:
1138 request.database = database
1139 if transaction is not None:
1140 request.transaction = transaction
1141
1142 # Wrap the RPC method; this adds retry and timeout information,
1143 # and friendly error handling.
1144 rpc = self._client._transport._wrapped_methods[self._client._transport.rollback]
1145
1146 # Certain fields should be provided within the metadata header;
1147 # add these here.
1148 metadata = tuple(metadata) + (
1149 gapic_v1.routing_header.to_grpc_metadata((("database", request.database),)),
1150 )
1151
1152 # Validate the universe domain.
1153 self._client._validate_universe_domain()
1154
1155 # Send the request.
1156 await rpc(
1157 request,
1158 retry=retry,
1159 timeout=timeout,
1160 metadata=metadata,
1161 )
1162
1163 def run_query(
1164 self,
1165 request: Optional[Union[firestore.RunQueryRequest, dict]] = None,
1166 *,
1167 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1168 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1169 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1170 ) -> Awaitable[AsyncIterable[firestore.RunQueryResponse]]:
1171 r"""Runs a query.
1172
1173 .. code-block:: python
1174
1175 # This snippet has been automatically generated and should be regarded as a
1176 # code template only.
1177 # It will require modifications to work:
1178 # - It may require correct/in-range values for request initialization.
1179 # - It may require specifying regional endpoints when creating the service
1180 # client as shown in:
1181 # https://googleapis.dev/python/google-api-core/latest/client_options.html
1182 from google.cloud import firestore_v1
1183
1184 async def sample_run_query():
1185 # Create a client
1186 client = firestore_v1.FirestoreAsyncClient()
1187
1188 # Initialize request argument(s)
1189 request = firestore_v1.RunQueryRequest(
1190 transaction=b'transaction_blob',
1191 parent="parent_value",
1192 )
1193
1194 # Make the request
1195 stream = await client.run_query(request=request)
1196
1197 # Handle the response
1198 async for response in stream:
1199 print(response)
1200
1201 Args:
1202 request (Optional[Union[google.cloud.firestore_v1.types.RunQueryRequest, dict]]):
1203 The request object. The request for
1204 [Firestore.RunQuery][google.firestore.v1.Firestore.RunQuery].
1205 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
1206 should be retried.
1207 timeout (float): The timeout for this request.
1208 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1209 sent along with the request as metadata. Normally, each value must be of type `str`,
1210 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1211 be of type `bytes`.
1212
1213 Returns:
1214 AsyncIterable[google.cloud.firestore_v1.types.RunQueryResponse]:
1215 The response for
1216 [Firestore.RunQuery][google.firestore.v1.Firestore.RunQuery].
1217
1218 """
1219 # Create or coerce a protobuf request object.
1220 # - Use the request object if provided (there's no risk of modifying the input as
1221 # there are no flattened fields), or create one.
1222 if not isinstance(request, firestore.RunQueryRequest):
1223 request = firestore.RunQueryRequest(request)
1224
1225 # Wrap the RPC method; this adds retry and timeout information,
1226 # and friendly error handling.
1227 rpc = self._client._transport._wrapped_methods[
1228 self._client._transport.run_query
1229 ]
1230
1231 # Certain fields should be provided within the metadata header;
1232 # add these here.
1233 metadata = tuple(metadata) + (
1234 gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
1235 )
1236
1237 # Validate the universe domain.
1238 self._client._validate_universe_domain()
1239
1240 # Send the request.
1241 response = rpc(
1242 request,
1243 retry=retry,
1244 timeout=timeout,
1245 metadata=metadata,
1246 )
1247
1248 # Done; return the response.
1249 return response
1250
1251 def run_aggregation_query(
1252 self,
1253 request: Optional[Union[firestore.RunAggregationQueryRequest, dict]] = None,
1254 *,
1255 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1256 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1257 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1258 ) -> Awaitable[AsyncIterable[firestore.RunAggregationQueryResponse]]:
1259 r"""Runs an aggregation query.
1260
1261 Rather than producing [Document][google.firestore.v1.Document]
1262 results like
1263 [Firestore.RunQuery][google.firestore.v1.Firestore.RunQuery],
1264 this API allows running an aggregation to produce a series of
1265 [AggregationResult][google.firestore.v1.AggregationResult]
1266 server-side.
1267
1268 High-Level Example:
1269
1270 ::
1271
1272 -- Return the number of documents in table given a filter.
1273 SELECT COUNT(*) FROM ( SELECT * FROM k where a = true );
1274
1275 .. code-block:: python
1276
1277 # This snippet has been automatically generated and should be regarded as a
1278 # code template only.
1279 # It will require modifications to work:
1280 # - It may require correct/in-range values for request initialization.
1281 # - It may require specifying regional endpoints when creating the service
1282 # client as shown in:
1283 # https://googleapis.dev/python/google-api-core/latest/client_options.html
1284 from google.cloud import firestore_v1
1285
1286 async def sample_run_aggregation_query():
1287 # Create a client
1288 client = firestore_v1.FirestoreAsyncClient()
1289
1290 # Initialize request argument(s)
1291 request = firestore_v1.RunAggregationQueryRequest(
1292 transaction=b'transaction_blob',
1293 parent="parent_value",
1294 )
1295
1296 # Make the request
1297 stream = await client.run_aggregation_query(request=request)
1298
1299 # Handle the response
1300 async for response in stream:
1301 print(response)
1302
1303 Args:
1304 request (Optional[Union[google.cloud.firestore_v1.types.RunAggregationQueryRequest, dict]]):
1305 The request object. The request for
1306 [Firestore.RunAggregationQuery][google.firestore.v1.Firestore.RunAggregationQuery].
1307 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
1308 should be retried.
1309 timeout (float): The timeout for this request.
1310 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1311 sent along with the request as metadata. Normally, each value must be of type `str`,
1312 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1313 be of type `bytes`.
1314
1315 Returns:
1316 AsyncIterable[google.cloud.firestore_v1.types.RunAggregationQueryResponse]:
1317 The response for
1318 [Firestore.RunAggregationQuery][google.firestore.v1.Firestore.RunAggregationQuery].
1319
1320 """
1321 # Create or coerce a protobuf request object.
1322 # - Use the request object if provided (there's no risk of modifying the input as
1323 # there are no flattened fields), or create one.
1324 if not isinstance(request, firestore.RunAggregationQueryRequest):
1325 request = firestore.RunAggregationQueryRequest(request)
1326
1327 # Wrap the RPC method; this adds retry and timeout information,
1328 # and friendly error handling.
1329 rpc = self._client._transport._wrapped_methods[
1330 self._client._transport.run_aggregation_query
1331 ]
1332
1333 # Certain fields should be provided within the metadata header;
1334 # add these here.
1335 metadata = tuple(metadata) + (
1336 gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
1337 )
1338
1339 # Validate the universe domain.
1340 self._client._validate_universe_domain()
1341
1342 # Send the request.
1343 response = rpc(
1344 request,
1345 retry=retry,
1346 timeout=timeout,
1347 metadata=metadata,
1348 )
1349
1350 # Done; return the response.
1351 return response
1352
1353 async def partition_query(
1354 self,
1355 request: Optional[Union[firestore.PartitionQueryRequest, dict]] = None,
1356 *,
1357 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1358 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1359 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1360 ) -> pagers.PartitionQueryAsyncPager:
1361 r"""Partitions a query by returning partition cursors
1362 that can be used to run the query in parallel. The
1363 returned partition cursors are split points that can be
1364 used by RunQuery as starting/end points for the query
1365 results.
1366
1367 .. code-block:: python
1368
1369 # This snippet has been automatically generated and should be regarded as a
1370 # code template only.
1371 # It will require modifications to work:
1372 # - It may require correct/in-range values for request initialization.
1373 # - It may require specifying regional endpoints when creating the service
1374 # client as shown in:
1375 # https://googleapis.dev/python/google-api-core/latest/client_options.html
1376 from google.cloud import firestore_v1
1377
1378 async def sample_partition_query():
1379 # Create a client
1380 client = firestore_v1.FirestoreAsyncClient()
1381
1382 # Initialize request argument(s)
1383 request = firestore_v1.PartitionQueryRequest(
1384 parent="parent_value",
1385 )
1386
1387 # Make the request
1388 page_result = client.partition_query(request=request)
1389
1390 # Handle the response
1391 async for response in page_result:
1392 print(response)
1393
1394 Args:
1395 request (Optional[Union[google.cloud.firestore_v1.types.PartitionQueryRequest, dict]]):
1396 The request object. The request for
1397 [Firestore.PartitionQuery][google.firestore.v1.Firestore.PartitionQuery].
1398 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
1399 should be retried.
1400 timeout (float): The timeout for this request.
1401 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1402 sent along with the request as metadata. Normally, each value must be of type `str`,
1403 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1404 be of type `bytes`.
1405
1406 Returns:
1407 google.cloud.firestore_v1.services.firestore.pagers.PartitionQueryAsyncPager:
1408 The response for
1409 [Firestore.PartitionQuery][google.firestore.v1.Firestore.PartitionQuery].
1410
1411 Iterating over this object will yield results and
1412 resolve additional pages automatically.
1413
1414 """
1415 # Create or coerce a protobuf request object.
1416 # - Use the request object if provided (there's no risk of modifying the input as
1417 # there are no flattened fields), or create one.
1418 if not isinstance(request, firestore.PartitionQueryRequest):
1419 request = firestore.PartitionQueryRequest(request)
1420
1421 # Wrap the RPC method; this adds retry and timeout information,
1422 # and friendly error handling.
1423 rpc = self._client._transport._wrapped_methods[
1424 self._client._transport.partition_query
1425 ]
1426
1427 # Certain fields should be provided within the metadata header;
1428 # add these here.
1429 metadata = tuple(metadata) + (
1430 gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
1431 )
1432
1433 # Validate the universe domain.
1434 self._client._validate_universe_domain()
1435
1436 # Send the request.
1437 response = await rpc(
1438 request,
1439 retry=retry,
1440 timeout=timeout,
1441 metadata=metadata,
1442 )
1443
1444 # This method is paged; wrap the response in a pager, which provides
1445 # an `__aiter__` convenience method.
1446 response = pagers.PartitionQueryAsyncPager(
1447 method=rpc,
1448 request=request,
1449 response=response,
1450 retry=retry,
1451 timeout=timeout,
1452 metadata=metadata,
1453 )
1454
1455 # Done; return the response.
1456 return response
1457
1458 def write(
1459 self,
1460 requests: Optional[AsyncIterator[firestore.WriteRequest]] = None,
1461 *,
1462 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1463 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1464 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1465 ) -> Awaitable[AsyncIterable[firestore.WriteResponse]]:
1466 r"""Streams batches of document updates and deletes, in
1467 order. This method is only available via gRPC or
1468 WebChannel (not REST).
1469
1470 .. code-block:: python
1471
1472 # This snippet has been automatically generated and should be regarded as a
1473 # code template only.
1474 # It will require modifications to work:
1475 # - It may require correct/in-range values for request initialization.
1476 # - It may require specifying regional endpoints when creating the service
1477 # client as shown in:
1478 # https://googleapis.dev/python/google-api-core/latest/client_options.html
1479 from google.cloud import firestore_v1
1480
1481 async def sample_write():
1482 # Create a client
1483 client = firestore_v1.FirestoreAsyncClient()
1484
1485 # Initialize request argument(s)
1486 request = firestore_v1.WriteRequest(
1487 database="database_value",
1488 )
1489
1490 # This method expects an iterator which contains
1491 # 'firestore_v1.WriteRequest' objects
1492 # Here we create a generator that yields a single `request` for
1493 # demonstrative purposes.
1494 requests = [request]
1495
1496 def request_generator():
1497 for request in requests:
1498 yield request
1499
1500 # Make the request
1501 stream = await client.write(requests=request_generator())
1502
1503 # Handle the response
1504 async for response in stream:
1505 print(response)
1506
1507 Args:
1508 requests (AsyncIterator[`google.cloud.firestore_v1.types.WriteRequest`]):
1509 The request object AsyncIterator. The request for
1510 [Firestore.Write][google.firestore.v1.Firestore.Write].
1511
1512 The first request creates a stream, or resumes an
1513 existing one from a token.
1514
1515 When creating a new stream, the server replies with a
1516 response containing only an ID and a token, to use in
1517 the next request.
1518
1519 When resuming a stream, the server first streams any
1520 responses later than the given token, then a response
1521 containing only an up-to-date token, to use in the next
1522 request.
1523 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
1524 should be retried.
1525 timeout (float): The timeout for this request.
1526 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1527 sent along with the request as metadata. Normally, each value must be of type `str`,
1528 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1529 be of type `bytes`.
1530
1531 Returns:
1532 AsyncIterable[google.cloud.firestore_v1.types.WriteResponse]:
1533 The response for
1534 [Firestore.Write][google.firestore.v1.Firestore.Write].
1535
1536 """
1537
1538 # Wrap the RPC method; this adds retry and timeout information,
1539 # and friendly error handling.
1540 rpc = self._client._transport._wrapped_methods[self._client._transport.write]
1541
1542 # Certain fields should be provided within the metadata header;
1543 # add these here.
1544 metadata = tuple(metadata) + (gapic_v1.routing_header.to_grpc_metadata(()),)
1545
1546 # Validate the universe domain.
1547 self._client._validate_universe_domain()
1548
1549 # Send the request.
1550 response = rpc(
1551 requests,
1552 retry=retry,
1553 timeout=timeout,
1554 metadata=metadata,
1555 )
1556
1557 # Done; return the response.
1558 return response
1559
1560 def listen(
1561 self,
1562 requests: Optional[AsyncIterator[firestore.ListenRequest]] = None,
1563 *,
1564 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1565 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1566 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1567 ) -> Awaitable[AsyncIterable[firestore.ListenResponse]]:
1568 r"""Listens to changes. This method is only available via
1569 gRPC or WebChannel (not REST).
1570
1571 .. code-block:: python
1572
1573 # This snippet has been automatically generated and should be regarded as a
1574 # code template only.
1575 # It will require modifications to work:
1576 # - It may require correct/in-range values for request initialization.
1577 # - It may require specifying regional endpoints when creating the service
1578 # client as shown in:
1579 # https://googleapis.dev/python/google-api-core/latest/client_options.html
1580 from google.cloud import firestore_v1
1581
1582 async def sample_listen():
1583 # Create a client
1584 client = firestore_v1.FirestoreAsyncClient()
1585
1586 # Initialize request argument(s)
1587 add_target = firestore_v1.Target()
1588 add_target.resume_token = b'resume_token_blob'
1589
1590 request = firestore_v1.ListenRequest(
1591 add_target=add_target,
1592 database="database_value",
1593 )
1594
1595 # This method expects an iterator which contains
1596 # 'firestore_v1.ListenRequest' objects
1597 # Here we create a generator that yields a single `request` for
1598 # demonstrative purposes.
1599 requests = [request]
1600
1601 def request_generator():
1602 for request in requests:
1603 yield request
1604
1605 # Make the request
1606 stream = await client.listen(requests=request_generator())
1607
1608 # Handle the response
1609 async for response in stream:
1610 print(response)
1611
1612 Args:
1613 requests (AsyncIterator[`google.cloud.firestore_v1.types.ListenRequest`]):
1614 The request object AsyncIterator. A request for
1615 [Firestore.Listen][google.firestore.v1.Firestore.Listen]
1616 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
1617 should be retried.
1618 timeout (float): The timeout for this request.
1619 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1620 sent along with the request as metadata. Normally, each value must be of type `str`,
1621 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1622 be of type `bytes`.
1623
1624 Returns:
1625 AsyncIterable[google.cloud.firestore_v1.types.ListenResponse]:
1626 The response for
1627 [Firestore.Listen][google.firestore.v1.Firestore.Listen].
1628
1629 """
1630
1631 # Wrap the RPC method; this adds retry and timeout information,
1632 # and friendly error handling.
1633 rpc = self._client._transport._wrapped_methods[self._client._transport.listen]
1634
1635 # Certain fields should be provided within the metadata header;
1636 # add these here.
1637 metadata = tuple(metadata) + (gapic_v1.routing_header.to_grpc_metadata(()),)
1638
1639 # Validate the universe domain.
1640 self._client._validate_universe_domain()
1641
1642 # Send the request.
1643 response = rpc(
1644 requests,
1645 retry=retry,
1646 timeout=timeout,
1647 metadata=metadata,
1648 )
1649
1650 # Done; return the response.
1651 return response
1652
1653 async def list_collection_ids(
1654 self,
1655 request: Optional[Union[firestore.ListCollectionIdsRequest, dict]] = None,
1656 *,
1657 parent: Optional[str] = None,
1658 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1659 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1660 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1661 ) -> pagers.ListCollectionIdsAsyncPager:
1662 r"""Lists all the collection IDs underneath a document.
1663
1664 .. code-block:: python
1665
1666 # This snippet has been automatically generated and should be regarded as a
1667 # code template only.
1668 # It will require modifications to work:
1669 # - It may require correct/in-range values for request initialization.
1670 # - It may require specifying regional endpoints when creating the service
1671 # client as shown in:
1672 # https://googleapis.dev/python/google-api-core/latest/client_options.html
1673 from google.cloud import firestore_v1
1674
1675 async def sample_list_collection_ids():
1676 # Create a client
1677 client = firestore_v1.FirestoreAsyncClient()
1678
1679 # Initialize request argument(s)
1680 request = firestore_v1.ListCollectionIdsRequest(
1681 parent="parent_value",
1682 )
1683
1684 # Make the request
1685 page_result = client.list_collection_ids(request=request)
1686
1687 # Handle the response
1688 async for response in page_result:
1689 print(response)
1690
1691 Args:
1692 request (Optional[Union[google.cloud.firestore_v1.types.ListCollectionIdsRequest, dict]]):
1693 The request object. The request for
1694 [Firestore.ListCollectionIds][google.firestore.v1.Firestore.ListCollectionIds].
1695 parent (:class:`str`):
1696 Required. The parent document. In the format:
1697 ``projects/{project_id}/databases/{database_id}/documents/{document_path}``.
1698 For example:
1699 ``projects/my-project/databases/my-database/documents/chatrooms/my-chatroom``
1700
1701 This corresponds to the ``parent`` field
1702 on the ``request`` instance; if ``request`` is provided, this
1703 should not be set.
1704 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
1705 should be retried.
1706 timeout (float): The timeout for this request.
1707 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1708 sent along with the request as metadata. Normally, each value must be of type `str`,
1709 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1710 be of type `bytes`.
1711
1712 Returns:
1713 google.cloud.firestore_v1.services.firestore.pagers.ListCollectionIdsAsyncPager:
1714 The response from
1715 [Firestore.ListCollectionIds][google.firestore.v1.Firestore.ListCollectionIds].
1716
1717 Iterating over this object will yield results and
1718 resolve additional pages automatically.
1719
1720 """
1721 # Create or coerce a protobuf request object.
1722 # - Quick check: If we got a request object, we should *not* have
1723 # gotten any keyword arguments that map to the request.
1724 flattened_params = [parent]
1725 has_flattened_params = (
1726 len([param for param in flattened_params if param is not None]) > 0
1727 )
1728 if request is not None and has_flattened_params:
1729 raise ValueError(
1730 "If the `request` argument is set, then none of "
1731 "the individual field arguments should be set."
1732 )
1733
1734 # - Use the request object if provided (there's no risk of modifying the input as
1735 # there are no flattened fields), or create one.
1736 if not isinstance(request, firestore.ListCollectionIdsRequest):
1737 request = firestore.ListCollectionIdsRequest(request)
1738
1739 # If we have keyword arguments corresponding to fields on the
1740 # request, apply these.
1741 if parent is not None:
1742 request.parent = parent
1743
1744 # Wrap the RPC method; this adds retry and timeout information,
1745 # and friendly error handling.
1746 rpc = self._client._transport._wrapped_methods[
1747 self._client._transport.list_collection_ids
1748 ]
1749
1750 # Certain fields should be provided within the metadata header;
1751 # add these here.
1752 metadata = tuple(metadata) + (
1753 gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
1754 )
1755
1756 # Validate the universe domain.
1757 self._client._validate_universe_domain()
1758
1759 # Send the request.
1760 response = await rpc(
1761 request,
1762 retry=retry,
1763 timeout=timeout,
1764 metadata=metadata,
1765 )
1766
1767 # This method is paged; wrap the response in a pager, which provides
1768 # an `__aiter__` convenience method.
1769 response = pagers.ListCollectionIdsAsyncPager(
1770 method=rpc,
1771 request=request,
1772 response=response,
1773 retry=retry,
1774 timeout=timeout,
1775 metadata=metadata,
1776 )
1777
1778 # Done; return the response.
1779 return response
1780
1781 async def batch_write(
1782 self,
1783 request: Optional[Union[firestore.BatchWriteRequest, dict]] = None,
1784 *,
1785 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1786 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1787 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1788 ) -> firestore.BatchWriteResponse:
1789 r"""Applies a batch of write operations.
1790
1791 The BatchWrite method does not apply the write operations
1792 atomically and can apply them out of order. Method does not
1793 allow more than one write per document. Each write succeeds or
1794 fails independently. See the
1795 [BatchWriteResponse][google.firestore.v1.BatchWriteResponse] for
1796 the success status of each write.
1797
1798 If you require an atomically applied set of writes, use
1799 [Commit][google.firestore.v1.Firestore.Commit] instead.
1800
1801 .. code-block:: python
1802
1803 # This snippet has been automatically generated and should be regarded as a
1804 # code template only.
1805 # It will require modifications to work:
1806 # - It may require correct/in-range values for request initialization.
1807 # - It may require specifying regional endpoints when creating the service
1808 # client as shown in:
1809 # https://googleapis.dev/python/google-api-core/latest/client_options.html
1810 from google.cloud import firestore_v1
1811
1812 async def sample_batch_write():
1813 # Create a client
1814 client = firestore_v1.FirestoreAsyncClient()
1815
1816 # Initialize request argument(s)
1817 request = firestore_v1.BatchWriteRequest(
1818 database="database_value",
1819 )
1820
1821 # Make the request
1822 response = await client.batch_write(request=request)
1823
1824 # Handle the response
1825 print(response)
1826
1827 Args:
1828 request (Optional[Union[google.cloud.firestore_v1.types.BatchWriteRequest, dict]]):
1829 The request object. The request for
1830 [Firestore.BatchWrite][google.firestore.v1.Firestore.BatchWrite].
1831 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
1832 should be retried.
1833 timeout (float): The timeout for this request.
1834 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1835 sent along with the request as metadata. Normally, each value must be of type `str`,
1836 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1837 be of type `bytes`.
1838
1839 Returns:
1840 google.cloud.firestore_v1.types.BatchWriteResponse:
1841 The response from
1842 [Firestore.BatchWrite][google.firestore.v1.Firestore.BatchWrite].
1843
1844 """
1845 # Create or coerce a protobuf request object.
1846 # - Use the request object if provided (there's no risk of modifying the input as
1847 # there are no flattened fields), or create one.
1848 if not isinstance(request, firestore.BatchWriteRequest):
1849 request = firestore.BatchWriteRequest(request)
1850
1851 # Wrap the RPC method; this adds retry and timeout information,
1852 # and friendly error handling.
1853 rpc = self._client._transport._wrapped_methods[
1854 self._client._transport.batch_write
1855 ]
1856
1857 # Certain fields should be provided within the metadata header;
1858 # add these here.
1859 metadata = tuple(metadata) + (
1860 gapic_v1.routing_header.to_grpc_metadata((("database", request.database),)),
1861 )
1862
1863 # Validate the universe domain.
1864 self._client._validate_universe_domain()
1865
1866 # Send the request.
1867 response = await rpc(
1868 request,
1869 retry=retry,
1870 timeout=timeout,
1871 metadata=metadata,
1872 )
1873
1874 # Done; return the response.
1875 return response
1876
1877 async def create_document(
1878 self,
1879 request: Optional[Union[firestore.CreateDocumentRequest, dict]] = None,
1880 *,
1881 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1882 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1883 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1884 ) -> document.Document:
1885 r"""Creates a new document.
1886
1887 .. code-block:: python
1888
1889 # This snippet has been automatically generated and should be regarded as a
1890 # code template only.
1891 # It will require modifications to work:
1892 # - It may require correct/in-range values for request initialization.
1893 # - It may require specifying regional endpoints when creating the service
1894 # client as shown in:
1895 # https://googleapis.dev/python/google-api-core/latest/client_options.html
1896 from google.cloud import firestore_v1
1897
1898 async def sample_create_document():
1899 # Create a client
1900 client = firestore_v1.FirestoreAsyncClient()
1901
1902 # Initialize request argument(s)
1903 request = firestore_v1.CreateDocumentRequest(
1904 parent="parent_value",
1905 collection_id="collection_id_value",
1906 )
1907
1908 # Make the request
1909 response = await client.create_document(request=request)
1910
1911 # Handle the response
1912 print(response)
1913
1914 Args:
1915 request (Optional[Union[google.cloud.firestore_v1.types.CreateDocumentRequest, dict]]):
1916 The request object. The request for
1917 [Firestore.CreateDocument][google.firestore.v1.Firestore.CreateDocument].
1918 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
1919 should be retried.
1920 timeout (float): The timeout for this request.
1921 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1922 sent along with the request as metadata. Normally, each value must be of type `str`,
1923 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1924 be of type `bytes`.
1925
1926 Returns:
1927 google.cloud.firestore_v1.types.Document:
1928 A Firestore document.
1929
1930 Must not exceed 1 MiB - 4 bytes.
1931
1932 """
1933 # Create or coerce a protobuf request object.
1934 # - Use the request object if provided (there's no risk of modifying the input as
1935 # there are no flattened fields), or create one.
1936 if not isinstance(request, firestore.CreateDocumentRequest):
1937 request = firestore.CreateDocumentRequest(request)
1938
1939 # Wrap the RPC method; this adds retry and timeout information,
1940 # and friendly error handling.
1941 rpc = self._client._transport._wrapped_methods[
1942 self._client._transport.create_document
1943 ]
1944
1945 # Certain fields should be provided within the metadata header;
1946 # add these here.
1947 metadata = tuple(metadata) + (
1948 gapic_v1.routing_header.to_grpc_metadata(
1949 (
1950 ("parent", request.parent),
1951 ("collection_id", request.collection_id),
1952 )
1953 ),
1954 )
1955
1956 # Validate the universe domain.
1957 self._client._validate_universe_domain()
1958
1959 # Send the request.
1960 response = await rpc(
1961 request,
1962 retry=retry,
1963 timeout=timeout,
1964 metadata=metadata,
1965 )
1966
1967 # Done; return the response.
1968 return response
1969
1970 async def list_operations(
1971 self,
1972 request: Optional[operations_pb2.ListOperationsRequest] = None,
1973 *,
1974 retry: OptionalRetry = gapic_v1.method.DEFAULT,
1975 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
1976 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
1977 ) -> operations_pb2.ListOperationsResponse:
1978 r"""Lists operations that match the specified filter in the request.
1979
1980 Args:
1981 request (:class:`~.operations_pb2.ListOperationsRequest`):
1982 The request object. Request message for
1983 `ListOperations` method.
1984 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors,
1985 if any, should be retried.
1986 timeout (float): The timeout for this request.
1987 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
1988 sent along with the request as metadata. Normally, each value must be of type `str`,
1989 but for metadata keys ending with the suffix `-bin`, the corresponding values must
1990 be of type `bytes`.
1991 Returns:
1992 ~.operations_pb2.ListOperationsResponse:
1993 Response message for ``ListOperations`` method.
1994 """
1995 # Create or coerce a protobuf request object.
1996 # The request isn't a proto-plus wrapped type,
1997 # so it must be constructed via keyword expansion.
1998 if isinstance(request, dict):
1999 request = operations_pb2.ListOperationsRequest(**request)
2000
2001 # Wrap the RPC method; this adds retry and timeout information,
2002 # and friendly error handling.
2003 rpc = self.transport._wrapped_methods[self._client._transport.list_operations]
2004
2005 # Certain fields should be provided within the metadata header;
2006 # add these here.
2007 metadata = tuple(metadata) + (
2008 gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)),
2009 )
2010
2011 # Validate the universe domain.
2012 self._client._validate_universe_domain()
2013
2014 # Send the request.
2015 response = await rpc(
2016 request,
2017 retry=retry,
2018 timeout=timeout,
2019 metadata=metadata,
2020 )
2021
2022 # Done; return the response.
2023 return response
2024
2025 async def get_operation(
2026 self,
2027 request: Optional[operations_pb2.GetOperationRequest] = None,
2028 *,
2029 retry: OptionalRetry = gapic_v1.method.DEFAULT,
2030 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
2031 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
2032 ) -> operations_pb2.Operation:
2033 r"""Gets the latest state of a long-running operation.
2034
2035 Args:
2036 request (:class:`~.operations_pb2.GetOperationRequest`):
2037 The request object. Request message for
2038 `GetOperation` method.
2039 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors,
2040 if any, should be retried.
2041 timeout (float): The timeout for this request.
2042 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
2043 sent along with the request as metadata. Normally, each value must be of type `str`,
2044 but for metadata keys ending with the suffix `-bin`, the corresponding values must
2045 be of type `bytes`.
2046 Returns:
2047 ~.operations_pb2.Operation:
2048 An ``Operation`` object.
2049 """
2050 # Create or coerce a protobuf request object.
2051 # The request isn't a proto-plus wrapped type,
2052 # so it must be constructed via keyword expansion.
2053 if isinstance(request, dict):
2054 request = operations_pb2.GetOperationRequest(**request)
2055
2056 # Wrap the RPC method; this adds retry and timeout information,
2057 # and friendly error handling.
2058 rpc = self.transport._wrapped_methods[self._client._transport.get_operation]
2059
2060 # Certain fields should be provided within the metadata header;
2061 # add these here.
2062 metadata = tuple(metadata) + (
2063 gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)),
2064 )
2065
2066 # Validate the universe domain.
2067 self._client._validate_universe_domain()
2068
2069 # Send the request.
2070 response = await rpc(
2071 request,
2072 retry=retry,
2073 timeout=timeout,
2074 metadata=metadata,
2075 )
2076
2077 # Done; return the response.
2078 return response
2079
2080 async def delete_operation(
2081 self,
2082 request: Optional[operations_pb2.DeleteOperationRequest] = None,
2083 *,
2084 retry: OptionalRetry = gapic_v1.method.DEFAULT,
2085 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
2086 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
2087 ) -> None:
2088 r"""Deletes a long-running operation.
2089
2090 This method indicates that the client is no longer interested
2091 in the operation result. It does not cancel the operation.
2092 If the server doesn't support this method, it returns
2093 `google.rpc.Code.UNIMPLEMENTED`.
2094
2095 Args:
2096 request (:class:`~.operations_pb2.DeleteOperationRequest`):
2097 The request object. Request message for
2098 `DeleteOperation` method.
2099 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors,
2100 if any, should be retried.
2101 timeout (float): The timeout for this request.
2102 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
2103 sent along with the request as metadata. Normally, each value must be of type `str`,
2104 but for metadata keys ending with the suffix `-bin`, the corresponding values must
2105 be of type `bytes`.
2106 Returns:
2107 None
2108 """
2109 # Create or coerce a protobuf request object.
2110 # The request isn't a proto-plus wrapped type,
2111 # so it must be constructed via keyword expansion.
2112 if isinstance(request, dict):
2113 request = operations_pb2.DeleteOperationRequest(**request)
2114
2115 # Wrap the RPC method; this adds retry and timeout information,
2116 # and friendly error handling.
2117 rpc = self.transport._wrapped_methods[self._client._transport.delete_operation]
2118
2119 # Certain fields should be provided within the metadata header;
2120 # add these here.
2121 metadata = tuple(metadata) + (
2122 gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)),
2123 )
2124
2125 # Validate the universe domain.
2126 self._client._validate_universe_domain()
2127
2128 # Send the request.
2129 await rpc(
2130 request,
2131 retry=retry,
2132 timeout=timeout,
2133 metadata=metadata,
2134 )
2135
2136 async def cancel_operation(
2137 self,
2138 request: Optional[operations_pb2.CancelOperationRequest] = None,
2139 *,
2140 retry: OptionalRetry = gapic_v1.method.DEFAULT,
2141 timeout: Union[float, object] = gapic_v1.method.DEFAULT,
2142 metadata: Sequence[Tuple[str, Union[str, bytes]]] = (),
2143 ) -> None:
2144 r"""Starts asynchronous cancellation on a long-running operation.
2145
2146 The server makes a best effort to cancel the operation, but success
2147 is not guaranteed. If the server doesn't support this method, it returns
2148 `google.rpc.Code.UNIMPLEMENTED`.
2149
2150 Args:
2151 request (:class:`~.operations_pb2.CancelOperationRequest`):
2152 The request object. Request message for
2153 `CancelOperation` method.
2154 retry (google.api_core.retry_async.AsyncRetry): Designation of what errors,
2155 if any, should be retried.
2156 timeout (float): The timeout for this request.
2157 metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
2158 sent along with the request as metadata. Normally, each value must be of type `str`,
2159 but for metadata keys ending with the suffix `-bin`, the corresponding values must
2160 be of type `bytes`.
2161 Returns:
2162 None
2163 """
2164 # Create or coerce a protobuf request object.
2165 # The request isn't a proto-plus wrapped type,
2166 # so it must be constructed via keyword expansion.
2167 if isinstance(request, dict):
2168 request = operations_pb2.CancelOperationRequest(**request)
2169
2170 # Wrap the RPC method; this adds retry and timeout information,
2171 # and friendly error handling.
2172 rpc = self.transport._wrapped_methods[self._client._transport.cancel_operation]
2173
2174 # Certain fields should be provided within the metadata header;
2175 # add these here.
2176 metadata = tuple(metadata) + (
2177 gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)),
2178 )
2179
2180 # Validate the universe domain.
2181 self._client._validate_universe_domain()
2182
2183 # Send the request.
2184 await rpc(
2185 request,
2186 retry=retry,
2187 timeout=timeout,
2188 metadata=metadata,
2189 )
2190
2191 async def __aenter__(self) -> "FirestoreAsyncClient":
2192 return self
2193
2194 async def __aexit__(self, exc_type, exc, tb):
2195 await self.transport.close()
2196
2197
2198DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
2199 gapic_version=package_version.__version__
2200)
2201
2202if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
2203 DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
2204
2205
2206__all__ = ("FirestoreAsyncClient",)