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 
    17import json  # type: ignore 
    18 
    19from google.auth.transport.requests import AuthorizedSession  # type: ignore 
    20from google.auth import credentials as ga_credentials  # type: ignore 
    21from google.api_core import exceptions as core_exceptions 
    22from google.api_core import retry as retries 
    23from google.api_core import rest_helpers 
    24from google.api_core import rest_streaming 
    25from google.api_core import gapic_v1 
    26import google.protobuf 
    27 
    28from google.protobuf import json_format 
    29from google.cloud.location import locations_pb2  # type: ignore 
    30 
    31from requests import __version__ as requests_version 
    32import dataclasses 
    33from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union 
    34import warnings 
    35 
    36 
    37from google.cloud.firestore_v1.types import document 
    38from google.cloud.firestore_v1.types import document as gf_document 
    39from google.cloud.firestore_v1.types import firestore 
    40from google.protobuf import empty_pb2  # type: ignore 
    41from google.longrunning import operations_pb2  # type: ignore 
    42 
    43 
    44from .rest_base import _BaseFirestoreRestTransport 
    45from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO 
    46 
    47try: 
    48    OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] 
    49except AttributeError:  # pragma: NO COVER 
    50    OptionalRetry = Union[retries.Retry, object, None]  # type: ignore 
    51 
    52try: 
    53    from google.api_core import client_logging  # type: ignore 
    54 
    55    CLIENT_LOGGING_SUPPORTED = True  # pragma: NO COVER 
    56except ImportError:  # pragma: NO COVER 
    57    CLIENT_LOGGING_SUPPORTED = False 
    58 
    59_LOGGER = logging.getLogger(__name__) 
    60 
    61DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( 
    62    gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, 
    63    grpc_version=None, 
    64    rest_version=f"requests@{requests_version}", 
    65) 
    66 
    67if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"):  # pragma: NO COVER 
    68    DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ 
    69 
    70 
    71class FirestoreRestInterceptor: 
    72    """Interceptor for Firestore. 
    73 
    74    Interceptors are used to manipulate requests, request metadata, and responses 
    75    in arbitrary ways. 
    76    Example use cases include: 
    77    * Logging 
    78    * Verifying requests according to service or custom semantics 
    79    * Stripping extraneous information from responses 
    80 
    81    These use cases and more can be enabled by injecting an 
    82    instance of a custom subclass when constructing the FirestoreRestTransport. 
    83 
    84    .. code-block:: python 
    85        class MyCustomFirestoreInterceptor(FirestoreRestInterceptor): 
    86            def pre_batch_get_documents(self, request, metadata): 
    87                logging.log(f"Received request: {request}") 
    88                return request, metadata 
    89 
    90            def post_batch_get_documents(self, response): 
    91                logging.log(f"Received response: {response}") 
    92                return response 
    93 
    94            def pre_batch_write(self, request, metadata): 
    95                logging.log(f"Received request: {request}") 
    96                return request, metadata 
    97 
    98            def post_batch_write(self, response): 
    99                logging.log(f"Received response: {response}") 
    100                return response 
    101 
    102            def pre_begin_transaction(self, request, metadata): 
    103                logging.log(f"Received request: {request}") 
    104                return request, metadata 
    105 
    106            def post_begin_transaction(self, response): 
    107                logging.log(f"Received response: {response}") 
    108                return response 
    109 
    110            def pre_commit(self, request, metadata): 
    111                logging.log(f"Received request: {request}") 
    112                return request, metadata 
    113 
    114            def post_commit(self, response): 
    115                logging.log(f"Received response: {response}") 
    116                return response 
    117 
    118            def pre_create_document(self, request, metadata): 
    119                logging.log(f"Received request: {request}") 
    120                return request, metadata 
    121 
    122            def post_create_document(self, response): 
    123                logging.log(f"Received response: {response}") 
    124                return response 
    125 
    126            def pre_delete_document(self, request, metadata): 
    127                logging.log(f"Received request: {request}") 
    128                return request, metadata 
    129 
    130            def pre_get_document(self, request, metadata): 
    131                logging.log(f"Received request: {request}") 
    132                return request, metadata 
    133 
    134            def post_get_document(self, response): 
    135                logging.log(f"Received response: {response}") 
    136                return response 
    137 
    138            def pre_list_collection_ids(self, request, metadata): 
    139                logging.log(f"Received request: {request}") 
    140                return request, metadata 
    141 
    142            def post_list_collection_ids(self, response): 
    143                logging.log(f"Received response: {response}") 
    144                return response 
    145 
    146            def pre_list_documents(self, request, metadata): 
    147                logging.log(f"Received request: {request}") 
    148                return request, metadata 
    149 
    150            def post_list_documents(self, response): 
    151                logging.log(f"Received response: {response}") 
    152                return response 
    153 
    154            def pre_partition_query(self, request, metadata): 
    155                logging.log(f"Received request: {request}") 
    156                return request, metadata 
    157 
    158            def post_partition_query(self, response): 
    159                logging.log(f"Received response: {response}") 
    160                return response 
    161 
    162            def pre_rollback(self, request, metadata): 
    163                logging.log(f"Received request: {request}") 
    164                return request, metadata 
    165 
    166            def pre_run_aggregation_query(self, request, metadata): 
    167                logging.log(f"Received request: {request}") 
    168                return request, metadata 
    169 
    170            def post_run_aggregation_query(self, response): 
    171                logging.log(f"Received response: {response}") 
    172                return response 
    173 
    174            def pre_run_query(self, request, metadata): 
    175                logging.log(f"Received request: {request}") 
    176                return request, metadata 
    177 
    178            def post_run_query(self, response): 
    179                logging.log(f"Received response: {response}") 
    180                return response 
    181 
    182            def pre_update_document(self, request, metadata): 
    183                logging.log(f"Received request: {request}") 
    184                return request, metadata 
    185 
    186            def post_update_document(self, response): 
    187                logging.log(f"Received response: {response}") 
    188                return response 
    189 
    190        transport = FirestoreRestTransport(interceptor=MyCustomFirestoreInterceptor()) 
    191        client = FirestoreClient(transport=transport) 
    192 
    193 
    194    """ 
    195 
    196    def pre_batch_get_documents( 
    197        self, 
    198        request: firestore.BatchGetDocumentsRequest, 
    199        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    200    ) -> Tuple[ 
    201        firestore.BatchGetDocumentsRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    202    ]: 
    203        """Pre-rpc interceptor for batch_get_documents 
    204 
    205        Override in a subclass to manipulate the request or metadata 
    206        before they are sent to the Firestore server. 
    207        """ 
    208        return request, metadata 
    209 
    210    def post_batch_get_documents( 
    211        self, response: rest_streaming.ResponseIterator 
    212    ) -> rest_streaming.ResponseIterator: 
    213        """Post-rpc interceptor for batch_get_documents 
    214 
    215        DEPRECATED. Please use the `post_batch_get_documents_with_metadata` 
    216        interceptor instead. 
    217 
    218        Override in a subclass to read or manipulate the response 
    219        after it is returned by the Firestore server but before 
    220        it is returned to user code. This `post_batch_get_documents` interceptor runs 
    221        before the `post_batch_get_documents_with_metadata` interceptor. 
    222        """ 
    223        return response 
    224 
    225    def post_batch_get_documents_with_metadata( 
    226        self, 
    227        response: rest_streaming.ResponseIterator, 
    228        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    229    ) -> Tuple[ 
    230        rest_streaming.ResponseIterator, Sequence[Tuple[str, Union[str, bytes]]] 
    231    ]: 
    232        """Post-rpc interceptor for batch_get_documents 
    233 
    234        Override in a subclass to read or manipulate the response or metadata after it 
    235        is returned by the Firestore server but before it is returned to user code. 
    236 
    237        We recommend only using this `post_batch_get_documents_with_metadata` 
    238        interceptor in new development instead of the `post_batch_get_documents` interceptor. 
    239        When both interceptors are used, this `post_batch_get_documents_with_metadata` interceptor runs after the 
    240        `post_batch_get_documents` interceptor. The (possibly modified) response returned by 
    241        `post_batch_get_documents` will be passed to 
    242        `post_batch_get_documents_with_metadata`. 
    243        """ 
    244        return response, metadata 
    245 
    246    def pre_batch_write( 
    247        self, 
    248        request: firestore.BatchWriteRequest, 
    249        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    250    ) -> Tuple[firestore.BatchWriteRequest, Sequence[Tuple[str, Union[str, bytes]]]]: 
    251        """Pre-rpc interceptor for batch_write 
    252 
    253        Override in a subclass to manipulate the request or metadata 
    254        before they are sent to the Firestore server. 
    255        """ 
    256        return request, metadata 
    257 
    258    def post_batch_write( 
    259        self, response: firestore.BatchWriteResponse 
    260    ) -> firestore.BatchWriteResponse: 
    261        """Post-rpc interceptor for batch_write 
    262 
    263        DEPRECATED. Please use the `post_batch_write_with_metadata` 
    264        interceptor instead. 
    265 
    266        Override in a subclass to read or manipulate the response 
    267        after it is returned by the Firestore server but before 
    268        it is returned to user code. This `post_batch_write` interceptor runs 
    269        before the `post_batch_write_with_metadata` interceptor. 
    270        """ 
    271        return response 
    272 
    273    def post_batch_write_with_metadata( 
    274        self, 
    275        response: firestore.BatchWriteResponse, 
    276        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    277    ) -> Tuple[firestore.BatchWriteResponse, Sequence[Tuple[str, Union[str, bytes]]]]: 
    278        """Post-rpc interceptor for batch_write 
    279 
    280        Override in a subclass to read or manipulate the response or metadata after it 
    281        is returned by the Firestore server but before it is returned to user code. 
    282 
    283        We recommend only using this `post_batch_write_with_metadata` 
    284        interceptor in new development instead of the `post_batch_write` interceptor. 
    285        When both interceptors are used, this `post_batch_write_with_metadata` interceptor runs after the 
    286        `post_batch_write` interceptor. The (possibly modified) response returned by 
    287        `post_batch_write` will be passed to 
    288        `post_batch_write_with_metadata`. 
    289        """ 
    290        return response, metadata 
    291 
    292    def pre_begin_transaction( 
    293        self, 
    294        request: firestore.BeginTransactionRequest, 
    295        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    296    ) -> Tuple[ 
    297        firestore.BeginTransactionRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    298    ]: 
    299        """Pre-rpc interceptor for begin_transaction 
    300 
    301        Override in a subclass to manipulate the request or metadata 
    302        before they are sent to the Firestore server. 
    303        """ 
    304        return request, metadata 
    305 
    306    def post_begin_transaction( 
    307        self, response: firestore.BeginTransactionResponse 
    308    ) -> firestore.BeginTransactionResponse: 
    309        """Post-rpc interceptor for begin_transaction 
    310 
    311        DEPRECATED. Please use the `post_begin_transaction_with_metadata` 
    312        interceptor instead. 
    313 
    314        Override in a subclass to read or manipulate the response 
    315        after it is returned by the Firestore server but before 
    316        it is returned to user code. This `post_begin_transaction` interceptor runs 
    317        before the `post_begin_transaction_with_metadata` interceptor. 
    318        """ 
    319        return response 
    320 
    321    def post_begin_transaction_with_metadata( 
    322        self, 
    323        response: firestore.BeginTransactionResponse, 
    324        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    325    ) -> Tuple[ 
    326        firestore.BeginTransactionResponse, Sequence[Tuple[str, Union[str, bytes]]] 
    327    ]: 
    328        """Post-rpc interceptor for begin_transaction 
    329 
    330        Override in a subclass to read or manipulate the response or metadata after it 
    331        is returned by the Firestore server but before it is returned to user code. 
    332 
    333        We recommend only using this `post_begin_transaction_with_metadata` 
    334        interceptor in new development instead of the `post_begin_transaction` interceptor. 
    335        When both interceptors are used, this `post_begin_transaction_with_metadata` interceptor runs after the 
    336        `post_begin_transaction` interceptor. The (possibly modified) response returned by 
    337        `post_begin_transaction` will be passed to 
    338        `post_begin_transaction_with_metadata`. 
    339        """ 
    340        return response, metadata 
    341 
    342    def pre_commit( 
    343        self, 
    344        request: firestore.CommitRequest, 
    345        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    346    ) -> Tuple[firestore.CommitRequest, Sequence[Tuple[str, Union[str, bytes]]]]: 
    347        """Pre-rpc interceptor for commit 
    348 
    349        Override in a subclass to manipulate the request or metadata 
    350        before they are sent to the Firestore server. 
    351        """ 
    352        return request, metadata 
    353 
    354    def post_commit( 
    355        self, response: firestore.CommitResponse 
    356    ) -> firestore.CommitResponse: 
    357        """Post-rpc interceptor for commit 
    358 
    359        DEPRECATED. Please use the `post_commit_with_metadata` 
    360        interceptor instead. 
    361 
    362        Override in a subclass to read or manipulate the response 
    363        after it is returned by the Firestore server but before 
    364        it is returned to user code. This `post_commit` interceptor runs 
    365        before the `post_commit_with_metadata` interceptor. 
    366        """ 
    367        return response 
    368 
    369    def post_commit_with_metadata( 
    370        self, 
    371        response: firestore.CommitResponse, 
    372        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    373    ) -> Tuple[firestore.CommitResponse, Sequence[Tuple[str, Union[str, bytes]]]]: 
    374        """Post-rpc interceptor for commit 
    375 
    376        Override in a subclass to read or manipulate the response or metadata after it 
    377        is returned by the Firestore server but before it is returned to user code. 
    378 
    379        We recommend only using this `post_commit_with_metadata` 
    380        interceptor in new development instead of the `post_commit` interceptor. 
    381        When both interceptors are used, this `post_commit_with_metadata` interceptor runs after the 
    382        `post_commit` interceptor. The (possibly modified) response returned by 
    383        `post_commit` will be passed to 
    384        `post_commit_with_metadata`. 
    385        """ 
    386        return response, metadata 
    387 
    388    def pre_create_document( 
    389        self, 
    390        request: firestore.CreateDocumentRequest, 
    391        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    392    ) -> Tuple[ 
    393        firestore.CreateDocumentRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    394    ]: 
    395        """Pre-rpc interceptor for create_document 
    396 
    397        Override in a subclass to manipulate the request or metadata 
    398        before they are sent to the Firestore server. 
    399        """ 
    400        return request, metadata 
    401 
    402    def post_create_document(self, response: document.Document) -> document.Document: 
    403        """Post-rpc interceptor for create_document 
    404 
    405        DEPRECATED. Please use the `post_create_document_with_metadata` 
    406        interceptor instead. 
    407 
    408        Override in a subclass to read or manipulate the response 
    409        after it is returned by the Firestore server but before 
    410        it is returned to user code. This `post_create_document` interceptor runs 
    411        before the `post_create_document_with_metadata` interceptor. 
    412        """ 
    413        return response 
    414 
    415    def post_create_document_with_metadata( 
    416        self, 
    417        response: document.Document, 
    418        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    419    ) -> Tuple[document.Document, Sequence[Tuple[str, Union[str, bytes]]]]: 
    420        """Post-rpc interceptor for create_document 
    421 
    422        Override in a subclass to read or manipulate the response or metadata after it 
    423        is returned by the Firestore server but before it is returned to user code. 
    424 
    425        We recommend only using this `post_create_document_with_metadata` 
    426        interceptor in new development instead of the `post_create_document` interceptor. 
    427        When both interceptors are used, this `post_create_document_with_metadata` interceptor runs after the 
    428        `post_create_document` interceptor. The (possibly modified) response returned by 
    429        `post_create_document` will be passed to 
    430        `post_create_document_with_metadata`. 
    431        """ 
    432        return response, metadata 
    433 
    434    def pre_delete_document( 
    435        self, 
    436        request: firestore.DeleteDocumentRequest, 
    437        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    438    ) -> Tuple[ 
    439        firestore.DeleteDocumentRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    440    ]: 
    441        """Pre-rpc interceptor for delete_document 
    442 
    443        Override in a subclass to manipulate the request or metadata 
    444        before they are sent to the Firestore server. 
    445        """ 
    446        return request, metadata 
    447 
    448    def pre_get_document( 
    449        self, 
    450        request: firestore.GetDocumentRequest, 
    451        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    452    ) -> Tuple[firestore.GetDocumentRequest, Sequence[Tuple[str, Union[str, bytes]]]]: 
    453        """Pre-rpc interceptor for get_document 
    454 
    455        Override in a subclass to manipulate the request or metadata 
    456        before they are sent to the Firestore server. 
    457        """ 
    458        return request, metadata 
    459 
    460    def post_get_document(self, response: document.Document) -> document.Document: 
    461        """Post-rpc interceptor for get_document 
    462 
    463        DEPRECATED. Please use the `post_get_document_with_metadata` 
    464        interceptor instead. 
    465 
    466        Override in a subclass to read or manipulate the response 
    467        after it is returned by the Firestore server but before 
    468        it is returned to user code. This `post_get_document` interceptor runs 
    469        before the `post_get_document_with_metadata` interceptor. 
    470        """ 
    471        return response 
    472 
    473    def post_get_document_with_metadata( 
    474        self, 
    475        response: document.Document, 
    476        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    477    ) -> Tuple[document.Document, Sequence[Tuple[str, Union[str, bytes]]]]: 
    478        """Post-rpc interceptor for get_document 
    479 
    480        Override in a subclass to read or manipulate the response or metadata after it 
    481        is returned by the Firestore server but before it is returned to user code. 
    482 
    483        We recommend only using this `post_get_document_with_metadata` 
    484        interceptor in new development instead of the `post_get_document` interceptor. 
    485        When both interceptors are used, this `post_get_document_with_metadata` interceptor runs after the 
    486        `post_get_document` interceptor. The (possibly modified) response returned by 
    487        `post_get_document` will be passed to 
    488        `post_get_document_with_metadata`. 
    489        """ 
    490        return response, metadata 
    491 
    492    def pre_list_collection_ids( 
    493        self, 
    494        request: firestore.ListCollectionIdsRequest, 
    495        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    496    ) -> Tuple[ 
    497        firestore.ListCollectionIdsRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    498    ]: 
    499        """Pre-rpc interceptor for list_collection_ids 
    500 
    501        Override in a subclass to manipulate the request or metadata 
    502        before they are sent to the Firestore server. 
    503        """ 
    504        return request, metadata 
    505 
    506    def post_list_collection_ids( 
    507        self, response: firestore.ListCollectionIdsResponse 
    508    ) -> firestore.ListCollectionIdsResponse: 
    509        """Post-rpc interceptor for list_collection_ids 
    510 
    511        DEPRECATED. Please use the `post_list_collection_ids_with_metadata` 
    512        interceptor instead. 
    513 
    514        Override in a subclass to read or manipulate the response 
    515        after it is returned by the Firestore server but before 
    516        it is returned to user code. This `post_list_collection_ids` interceptor runs 
    517        before the `post_list_collection_ids_with_metadata` interceptor. 
    518        """ 
    519        return response 
    520 
    521    def post_list_collection_ids_with_metadata( 
    522        self, 
    523        response: firestore.ListCollectionIdsResponse, 
    524        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    525    ) -> Tuple[ 
    526        firestore.ListCollectionIdsResponse, Sequence[Tuple[str, Union[str, bytes]]] 
    527    ]: 
    528        """Post-rpc interceptor for list_collection_ids 
    529 
    530        Override in a subclass to read or manipulate the response or metadata after it 
    531        is returned by the Firestore server but before it is returned to user code. 
    532 
    533        We recommend only using this `post_list_collection_ids_with_metadata` 
    534        interceptor in new development instead of the `post_list_collection_ids` interceptor. 
    535        When both interceptors are used, this `post_list_collection_ids_with_metadata` interceptor runs after the 
    536        `post_list_collection_ids` interceptor. The (possibly modified) response returned by 
    537        `post_list_collection_ids` will be passed to 
    538        `post_list_collection_ids_with_metadata`. 
    539        """ 
    540        return response, metadata 
    541 
    542    def pre_list_documents( 
    543        self, 
    544        request: firestore.ListDocumentsRequest, 
    545        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    546    ) -> Tuple[firestore.ListDocumentsRequest, Sequence[Tuple[str, Union[str, bytes]]]]: 
    547        """Pre-rpc interceptor for list_documents 
    548 
    549        Override in a subclass to manipulate the request or metadata 
    550        before they are sent to the Firestore server. 
    551        """ 
    552        return request, metadata 
    553 
    554    def post_list_documents( 
    555        self, response: firestore.ListDocumentsResponse 
    556    ) -> firestore.ListDocumentsResponse: 
    557        """Post-rpc interceptor for list_documents 
    558 
    559        DEPRECATED. Please use the `post_list_documents_with_metadata` 
    560        interceptor instead. 
    561 
    562        Override in a subclass to read or manipulate the response 
    563        after it is returned by the Firestore server but before 
    564        it is returned to user code. This `post_list_documents` interceptor runs 
    565        before the `post_list_documents_with_metadata` interceptor. 
    566        """ 
    567        return response 
    568 
    569    def post_list_documents_with_metadata( 
    570        self, 
    571        response: firestore.ListDocumentsResponse, 
    572        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    573    ) -> Tuple[ 
    574        firestore.ListDocumentsResponse, Sequence[Tuple[str, Union[str, bytes]]] 
    575    ]: 
    576        """Post-rpc interceptor for list_documents 
    577 
    578        Override in a subclass to read or manipulate the response or metadata after it 
    579        is returned by the Firestore server but before it is returned to user code. 
    580 
    581        We recommend only using this `post_list_documents_with_metadata` 
    582        interceptor in new development instead of the `post_list_documents` interceptor. 
    583        When both interceptors are used, this `post_list_documents_with_metadata` interceptor runs after the 
    584        `post_list_documents` interceptor. The (possibly modified) response returned by 
    585        `post_list_documents` will be passed to 
    586        `post_list_documents_with_metadata`. 
    587        """ 
    588        return response, metadata 
    589 
    590    def pre_partition_query( 
    591        self, 
    592        request: firestore.PartitionQueryRequest, 
    593        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    594    ) -> Tuple[ 
    595        firestore.PartitionQueryRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    596    ]: 
    597        """Pre-rpc interceptor for partition_query 
    598 
    599        Override in a subclass to manipulate the request or metadata 
    600        before they are sent to the Firestore server. 
    601        """ 
    602        return request, metadata 
    603 
    604    def post_partition_query( 
    605        self, response: firestore.PartitionQueryResponse 
    606    ) -> firestore.PartitionQueryResponse: 
    607        """Post-rpc interceptor for partition_query 
    608 
    609        DEPRECATED. Please use the `post_partition_query_with_metadata` 
    610        interceptor instead. 
    611 
    612        Override in a subclass to read or manipulate the response 
    613        after it is returned by the Firestore server but before 
    614        it is returned to user code. This `post_partition_query` interceptor runs 
    615        before the `post_partition_query_with_metadata` interceptor. 
    616        """ 
    617        return response 
    618 
    619    def post_partition_query_with_metadata( 
    620        self, 
    621        response: firestore.PartitionQueryResponse, 
    622        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    623    ) -> Tuple[ 
    624        firestore.PartitionQueryResponse, Sequence[Tuple[str, Union[str, bytes]]] 
    625    ]: 
    626        """Post-rpc interceptor for partition_query 
    627 
    628        Override in a subclass to read or manipulate the response or metadata after it 
    629        is returned by the Firestore server but before it is returned to user code. 
    630 
    631        We recommend only using this `post_partition_query_with_metadata` 
    632        interceptor in new development instead of the `post_partition_query` interceptor. 
    633        When both interceptors are used, this `post_partition_query_with_metadata` interceptor runs after the 
    634        `post_partition_query` interceptor. The (possibly modified) response returned by 
    635        `post_partition_query` will be passed to 
    636        `post_partition_query_with_metadata`. 
    637        """ 
    638        return response, metadata 
    639 
    640    def pre_rollback( 
    641        self, 
    642        request: firestore.RollbackRequest, 
    643        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    644    ) -> Tuple[firestore.RollbackRequest, Sequence[Tuple[str, Union[str, bytes]]]]: 
    645        """Pre-rpc interceptor for rollback 
    646 
    647        Override in a subclass to manipulate the request or metadata 
    648        before they are sent to the Firestore server. 
    649        """ 
    650        return request, metadata 
    651 
    652    def pre_run_aggregation_query( 
    653        self, 
    654        request: firestore.RunAggregationQueryRequest, 
    655        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    656    ) -> Tuple[ 
    657        firestore.RunAggregationQueryRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    658    ]: 
    659        """Pre-rpc interceptor for run_aggregation_query 
    660 
    661        Override in a subclass to manipulate the request or metadata 
    662        before they are sent to the Firestore server. 
    663        """ 
    664        return request, metadata 
    665 
    666    def post_run_aggregation_query( 
    667        self, response: rest_streaming.ResponseIterator 
    668    ) -> rest_streaming.ResponseIterator: 
    669        """Post-rpc interceptor for run_aggregation_query 
    670 
    671        DEPRECATED. Please use the `post_run_aggregation_query_with_metadata` 
    672        interceptor instead. 
    673 
    674        Override in a subclass to read or manipulate the response 
    675        after it is returned by the Firestore server but before 
    676        it is returned to user code. This `post_run_aggregation_query` interceptor runs 
    677        before the `post_run_aggregation_query_with_metadata` interceptor. 
    678        """ 
    679        return response 
    680 
    681    def post_run_aggregation_query_with_metadata( 
    682        self, 
    683        response: rest_streaming.ResponseIterator, 
    684        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    685    ) -> Tuple[ 
    686        rest_streaming.ResponseIterator, Sequence[Tuple[str, Union[str, bytes]]] 
    687    ]: 
    688        """Post-rpc interceptor for run_aggregation_query 
    689 
    690        Override in a subclass to read or manipulate the response or metadata after it 
    691        is returned by the Firestore server but before it is returned to user code. 
    692 
    693        We recommend only using this `post_run_aggregation_query_with_metadata` 
    694        interceptor in new development instead of the `post_run_aggregation_query` interceptor. 
    695        When both interceptors are used, this `post_run_aggregation_query_with_metadata` interceptor runs after the 
    696        `post_run_aggregation_query` interceptor. The (possibly modified) response returned by 
    697        `post_run_aggregation_query` will be passed to 
    698        `post_run_aggregation_query_with_metadata`. 
    699        """ 
    700        return response, metadata 
    701 
    702    def pre_run_query( 
    703        self, 
    704        request: firestore.RunQueryRequest, 
    705        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    706    ) -> Tuple[firestore.RunQueryRequest, Sequence[Tuple[str, Union[str, bytes]]]]: 
    707        """Pre-rpc interceptor for run_query 
    708 
    709        Override in a subclass to manipulate the request or metadata 
    710        before they are sent to the Firestore server. 
    711        """ 
    712        return request, metadata 
    713 
    714    def post_run_query( 
    715        self, response: rest_streaming.ResponseIterator 
    716    ) -> rest_streaming.ResponseIterator: 
    717        """Post-rpc interceptor for run_query 
    718 
    719        DEPRECATED. Please use the `post_run_query_with_metadata` 
    720        interceptor instead. 
    721 
    722        Override in a subclass to read or manipulate the response 
    723        after it is returned by the Firestore server but before 
    724        it is returned to user code. This `post_run_query` interceptor runs 
    725        before the `post_run_query_with_metadata` interceptor. 
    726        """ 
    727        return response 
    728 
    729    def post_run_query_with_metadata( 
    730        self, 
    731        response: rest_streaming.ResponseIterator, 
    732        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    733    ) -> Tuple[ 
    734        rest_streaming.ResponseIterator, Sequence[Tuple[str, Union[str, bytes]]] 
    735    ]: 
    736        """Post-rpc interceptor for run_query 
    737 
    738        Override in a subclass to read or manipulate the response or metadata after it 
    739        is returned by the Firestore server but before it is returned to user code. 
    740 
    741        We recommend only using this `post_run_query_with_metadata` 
    742        interceptor in new development instead of the `post_run_query` interceptor. 
    743        When both interceptors are used, this `post_run_query_with_metadata` interceptor runs after the 
    744        `post_run_query` interceptor. The (possibly modified) response returned by 
    745        `post_run_query` will be passed to 
    746        `post_run_query_with_metadata`. 
    747        """ 
    748        return response, metadata 
    749 
    750    def pre_update_document( 
    751        self, 
    752        request: firestore.UpdateDocumentRequest, 
    753        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    754    ) -> Tuple[ 
    755        firestore.UpdateDocumentRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    756    ]: 
    757        """Pre-rpc interceptor for update_document 
    758 
    759        Override in a subclass to manipulate the request or metadata 
    760        before they are sent to the Firestore server. 
    761        """ 
    762        return request, metadata 
    763 
    764    def post_update_document( 
    765        self, response: gf_document.Document 
    766    ) -> gf_document.Document: 
    767        """Post-rpc interceptor for update_document 
    768 
    769        DEPRECATED. Please use the `post_update_document_with_metadata` 
    770        interceptor instead. 
    771 
    772        Override in a subclass to read or manipulate the response 
    773        after it is returned by the Firestore server but before 
    774        it is returned to user code. This `post_update_document` interceptor runs 
    775        before the `post_update_document_with_metadata` interceptor. 
    776        """ 
    777        return response 
    778 
    779    def post_update_document_with_metadata( 
    780        self, 
    781        response: gf_document.Document, 
    782        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    783    ) -> Tuple[gf_document.Document, Sequence[Tuple[str, Union[str, bytes]]]]: 
    784        """Post-rpc interceptor for update_document 
    785 
    786        Override in a subclass to read or manipulate the response or metadata after it 
    787        is returned by the Firestore server but before it is returned to user code. 
    788 
    789        We recommend only using this `post_update_document_with_metadata` 
    790        interceptor in new development instead of the `post_update_document` interceptor. 
    791        When both interceptors are used, this `post_update_document_with_metadata` interceptor runs after the 
    792        `post_update_document` interceptor. The (possibly modified) response returned by 
    793        `post_update_document` will be passed to 
    794        `post_update_document_with_metadata`. 
    795        """ 
    796        return response, metadata 
    797 
    798    def pre_cancel_operation( 
    799        self, 
    800        request: operations_pb2.CancelOperationRequest, 
    801        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    802    ) -> Tuple[ 
    803        operations_pb2.CancelOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    804    ]: 
    805        """Pre-rpc interceptor for cancel_operation 
    806 
    807        Override in a subclass to manipulate the request or metadata 
    808        before they are sent to the Firestore server. 
    809        """ 
    810        return request, metadata 
    811 
    812    def post_cancel_operation(self, response: None) -> None: 
    813        """Post-rpc interceptor for cancel_operation 
    814 
    815        Override in a subclass to manipulate the response 
    816        after it is returned by the Firestore server but before 
    817        it is returned to user code. 
    818        """ 
    819        return response 
    820 
    821    def pre_delete_operation( 
    822        self, 
    823        request: operations_pb2.DeleteOperationRequest, 
    824        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    825    ) -> Tuple[ 
    826        operations_pb2.DeleteOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    827    ]: 
    828        """Pre-rpc interceptor for delete_operation 
    829 
    830        Override in a subclass to manipulate the request or metadata 
    831        before they are sent to the Firestore server. 
    832        """ 
    833        return request, metadata 
    834 
    835    def post_delete_operation(self, response: None) -> None: 
    836        """Post-rpc interceptor for delete_operation 
    837 
    838        Override in a subclass to manipulate the response 
    839        after it is returned by the Firestore server but before 
    840        it is returned to user code. 
    841        """ 
    842        return response 
    843 
    844    def pre_get_operation( 
    845        self, 
    846        request: operations_pb2.GetOperationRequest, 
    847        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    848    ) -> Tuple[ 
    849        operations_pb2.GetOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    850    ]: 
    851        """Pre-rpc interceptor for get_operation 
    852 
    853        Override in a subclass to manipulate the request or metadata 
    854        before they are sent to the Firestore server. 
    855        """ 
    856        return request, metadata 
    857 
    858    def post_get_operation( 
    859        self, response: operations_pb2.Operation 
    860    ) -> operations_pb2.Operation: 
    861        """Post-rpc interceptor for get_operation 
    862 
    863        Override in a subclass to manipulate the response 
    864        after it is returned by the Firestore server but before 
    865        it is returned to user code. 
    866        """ 
    867        return response 
    868 
    869    def pre_list_operations( 
    870        self, 
    871        request: operations_pb2.ListOperationsRequest, 
    872        metadata: Sequence[Tuple[str, Union[str, bytes]]], 
    873    ) -> Tuple[ 
    874        operations_pb2.ListOperationsRequest, Sequence[Tuple[str, Union[str, bytes]]] 
    875    ]: 
    876        """Pre-rpc interceptor for list_operations 
    877 
    878        Override in a subclass to manipulate the request or metadata 
    879        before they are sent to the Firestore server. 
    880        """ 
    881        return request, metadata 
    882 
    883    def post_list_operations( 
    884        self, response: operations_pb2.ListOperationsResponse 
    885    ) -> operations_pb2.ListOperationsResponse: 
    886        """Post-rpc interceptor for list_operations 
    887 
    888        Override in a subclass to manipulate the response 
    889        after it is returned by the Firestore server but before 
    890        it is returned to user code. 
    891        """ 
    892        return response 
    893 
    894 
    895@dataclasses.dataclass 
    896class FirestoreRestStub: 
    897    _session: AuthorizedSession 
    898    _host: str 
    899    _interceptor: FirestoreRestInterceptor 
    900 
    901 
    902class FirestoreRestTransport(_BaseFirestoreRestTransport): 
    903    """REST backend synchronous transport for Firestore. 
    904 
    905    The Cloud Firestore service. 
    906 
    907    Cloud Firestore is a fast, fully managed, serverless, 
    908    cloud-native NoSQL document database that simplifies storing, 
    909    syncing, and querying data for your mobile, web, and IoT apps at 
    910    global scale. Its client libraries provide live synchronization 
    911    and offline support, while its security features and 
    912    integrations with Firebase and Google Cloud Platform accelerate 
    913    building truly serverless apps. 
    914 
    915    This class defines the same methods as the primary client, so the 
    916    primary client can load the underlying transport implementation 
    917    and call it. 
    918 
    919    It sends JSON representations of protocol buffers over HTTP/1.1 
    920    """ 
    921 
    922    def __init__( 
    923        self, 
    924        *, 
    925        host: str = "firestore.googleapis.com", 
    926        credentials: Optional[ga_credentials.Credentials] = None, 
    927        credentials_file: Optional[str] = None, 
    928        scopes: Optional[Sequence[str]] = None, 
    929        client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, 
    930        quota_project_id: Optional[str] = None, 
    931        client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, 
    932        always_use_jwt_access: Optional[bool] = False, 
    933        url_scheme: str = "https", 
    934        interceptor: Optional[FirestoreRestInterceptor] = None, 
    935        api_audience: Optional[str] = None, 
    936    ) -> None: 
    937        """Instantiate the transport. 
    938 
    939        Args: 
    940            host (Optional[str]): 
    941                 The hostname to connect to (default: 'firestore.googleapis.com'). 
    942            credentials (Optional[google.auth.credentials.Credentials]): The 
    943                authorization credentials to attach to requests. These 
    944                credentials identify the application to the service; if none 
    945                are specified, the client will attempt to ascertain the 
    946                credentials from the environment. 
    947 
    948            credentials_file (Optional[str]): A file with credentials that can 
    949                be loaded with :func:`google.auth.load_credentials_from_file`. 
    950                This argument is ignored if ``channel`` is provided. 
    951            scopes (Optional(Sequence[str])): A list of scopes. This argument is 
    952                ignored if ``channel`` is provided. 
    953            client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client 
    954                certificate to configure mutual TLS HTTP channel. It is ignored 
    955                if ``channel`` is provided. 
    956            quota_project_id (Optional[str]): An optional project to use for billing 
    957                and quota. 
    958            client_info (google.api_core.gapic_v1.client_info.ClientInfo): 
    959                The client info used to send a user-agent string along with 
    960                API requests. If ``None``, then default info will be used. 
    961                Generally, you only need to set this if you are developing 
    962                your own client library. 
    963            always_use_jwt_access (Optional[bool]): Whether self signed JWT should 
    964                be used for service account credentials. 
    965            url_scheme: the protocol scheme for the API endpoint.  Normally 
    966                "https", but for testing or local servers, 
    967                "http" can be specified. 
    968        """ 
    969        # Run the base constructor 
    970        # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. 
    971        # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the 
    972        # credentials object 
    973        super().__init__( 
    974            host=host, 
    975            credentials=credentials, 
    976            client_info=client_info, 
    977            always_use_jwt_access=always_use_jwt_access, 
    978            url_scheme=url_scheme, 
    979            api_audience=api_audience, 
    980        ) 
    981        self._session = AuthorizedSession( 
    982            self._credentials, default_host=self.DEFAULT_HOST 
    983        ) 
    984        if client_cert_source_for_mtls: 
    985            self._session.configure_mtls_channel(client_cert_source_for_mtls) 
    986        self._interceptor = interceptor or FirestoreRestInterceptor() 
    987        self._prep_wrapped_messages(client_info) 
    988 
    989    class _BatchGetDocuments( 
    990        _BaseFirestoreRestTransport._BaseBatchGetDocuments, FirestoreRestStub 
    991    ): 
    992        def __hash__(self): 
    993            return hash("FirestoreRestTransport.BatchGetDocuments") 
    994 
    995        @staticmethod 
    996        def _get_response( 
    997            host, 
    998            metadata, 
    999            query_params, 
    1000            session, 
    1001            timeout, 
    1002            transcoded_request, 
    1003            body=None, 
    1004        ): 
    1005            uri = transcoded_request["uri"] 
    1006            method = transcoded_request["method"] 
    1007            headers = dict(metadata) 
    1008            headers["Content-Type"] = "application/json" 
    1009            response = getattr(session, method)( 
    1010                "{host}{uri}".format(host=host, uri=uri), 
    1011                timeout=timeout, 
    1012                headers=headers, 
    1013                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    1014                data=body, 
    1015                stream=True, 
    1016            ) 
    1017            return response 
    1018 
    1019        def __call__( 
    1020            self, 
    1021            request: firestore.BatchGetDocumentsRequest, 
    1022            *, 
    1023            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    1024            timeout: Optional[float] = None, 
    1025            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    1026        ) -> rest_streaming.ResponseIterator: 
    1027            r"""Call the batch get documents method over HTTP. 
    1028 
    1029            Args: 
    1030                request (~.firestore.BatchGetDocumentsRequest): 
    1031                    The request object. The request for 
    1032                [Firestore.BatchGetDocuments][google.firestore.v1.Firestore.BatchGetDocuments]. 
    1033                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    1034                    should be retried. 
    1035                timeout (float): The timeout for this request. 
    1036                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    1037                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    1038                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    1039                    be of type `bytes`. 
    1040 
    1041            Returns: 
    1042                ~.firestore.BatchGetDocumentsResponse: 
    1043                    The streamed response for 
    1044                [Firestore.BatchGetDocuments][google.firestore.v1.Firestore.BatchGetDocuments]. 
    1045 
    1046            """ 
    1047 
    1048            http_options = ( 
    1049                _BaseFirestoreRestTransport._BaseBatchGetDocuments._get_http_options() 
    1050            ) 
    1051 
    1052            request, metadata = self._interceptor.pre_batch_get_documents( 
    1053                request, metadata 
    1054            ) 
    1055            transcoded_request = _BaseFirestoreRestTransport._BaseBatchGetDocuments._get_transcoded_request( 
    1056                http_options, request 
    1057            ) 
    1058 
    1059            body = _BaseFirestoreRestTransport._BaseBatchGetDocuments._get_request_body_json( 
    1060                transcoded_request 
    1061            ) 
    1062 
    1063            # Jsonify the query params 
    1064            query_params = _BaseFirestoreRestTransport._BaseBatchGetDocuments._get_query_params_json( 
    1065                transcoded_request 
    1066            ) 
    1067 
    1068            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1069                logging.DEBUG 
    1070            ):  # pragma: NO COVER 
    1071                request_url = "{host}{uri}".format( 
    1072                    host=self._host, uri=transcoded_request["uri"] 
    1073                ) 
    1074                method = transcoded_request["method"] 
    1075                try: 
    1076                    request_payload = type(request).to_json(request) 
    1077                except: 
    1078                    request_payload = None 
    1079                http_request = { 
    1080                    "payload": request_payload, 
    1081                    "requestMethod": method, 
    1082                    "requestUrl": request_url, 
    1083                    "headers": dict(metadata), 
    1084                } 
    1085                _LOGGER.debug( 
    1086                    f"Sending request for google.firestore_v1.FirestoreClient.BatchGetDocuments", 
    1087                    extra={ 
    1088                        "serviceName": "google.firestore.v1.Firestore", 
    1089                        "rpcName": "BatchGetDocuments", 
    1090                        "httpRequest": http_request, 
    1091                        "metadata": http_request["headers"], 
    1092                    }, 
    1093                ) 
    1094 
    1095            # Send the request 
    1096            response = FirestoreRestTransport._BatchGetDocuments._get_response( 
    1097                self._host, 
    1098                metadata, 
    1099                query_params, 
    1100                self._session, 
    1101                timeout, 
    1102                transcoded_request, 
    1103                body, 
    1104            ) 
    1105 
    1106            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    1107            # subclass. 
    1108            if response.status_code >= 400: 
    1109                raise core_exceptions.from_http_response(response) 
    1110 
    1111            # Return the response 
    1112            resp = rest_streaming.ResponseIterator( 
    1113                response, firestore.BatchGetDocumentsResponse 
    1114            ) 
    1115 
    1116            resp = self._interceptor.post_batch_get_documents(resp) 
    1117            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    1118            resp, _ = self._interceptor.post_batch_get_documents_with_metadata( 
    1119                resp, response_metadata 
    1120            ) 
    1121            return resp 
    1122 
    1123    class _BatchWrite(_BaseFirestoreRestTransport._BaseBatchWrite, FirestoreRestStub): 
    1124        def __hash__(self): 
    1125            return hash("FirestoreRestTransport.BatchWrite") 
    1126 
    1127        @staticmethod 
    1128        def _get_response( 
    1129            host, 
    1130            metadata, 
    1131            query_params, 
    1132            session, 
    1133            timeout, 
    1134            transcoded_request, 
    1135            body=None, 
    1136        ): 
    1137            uri = transcoded_request["uri"] 
    1138            method = transcoded_request["method"] 
    1139            headers = dict(metadata) 
    1140            headers["Content-Type"] = "application/json" 
    1141            response = getattr(session, method)( 
    1142                "{host}{uri}".format(host=host, uri=uri), 
    1143                timeout=timeout, 
    1144                headers=headers, 
    1145                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    1146                data=body, 
    1147            ) 
    1148            return response 
    1149 
    1150        def __call__( 
    1151            self, 
    1152            request: firestore.BatchWriteRequest, 
    1153            *, 
    1154            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    1155            timeout: Optional[float] = None, 
    1156            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    1157        ) -> firestore.BatchWriteResponse: 
    1158            r"""Call the batch write method over HTTP. 
    1159 
    1160            Args: 
    1161                request (~.firestore.BatchWriteRequest): 
    1162                    The request object. The request for 
    1163                [Firestore.BatchWrite][google.firestore.v1.Firestore.BatchWrite]. 
    1164                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    1165                    should be retried. 
    1166                timeout (float): The timeout for this request. 
    1167                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    1168                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    1169                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    1170                    be of type `bytes`. 
    1171 
    1172            Returns: 
    1173                ~.firestore.BatchWriteResponse: 
    1174                    The response from 
    1175                [Firestore.BatchWrite][google.firestore.v1.Firestore.BatchWrite]. 
    1176 
    1177            """ 
    1178 
    1179            http_options = ( 
    1180                _BaseFirestoreRestTransport._BaseBatchWrite._get_http_options() 
    1181            ) 
    1182 
    1183            request, metadata = self._interceptor.pre_batch_write(request, metadata) 
    1184            transcoded_request = ( 
    1185                _BaseFirestoreRestTransport._BaseBatchWrite._get_transcoded_request( 
    1186                    http_options, request 
    1187                ) 
    1188            ) 
    1189 
    1190            body = _BaseFirestoreRestTransport._BaseBatchWrite._get_request_body_json( 
    1191                transcoded_request 
    1192            ) 
    1193 
    1194            # Jsonify the query params 
    1195            query_params = ( 
    1196                _BaseFirestoreRestTransport._BaseBatchWrite._get_query_params_json( 
    1197                    transcoded_request 
    1198                ) 
    1199            ) 
    1200 
    1201            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1202                logging.DEBUG 
    1203            ):  # pragma: NO COVER 
    1204                request_url = "{host}{uri}".format( 
    1205                    host=self._host, uri=transcoded_request["uri"] 
    1206                ) 
    1207                method = transcoded_request["method"] 
    1208                try: 
    1209                    request_payload = type(request).to_json(request) 
    1210                except: 
    1211                    request_payload = None 
    1212                http_request = { 
    1213                    "payload": request_payload, 
    1214                    "requestMethod": method, 
    1215                    "requestUrl": request_url, 
    1216                    "headers": dict(metadata), 
    1217                } 
    1218                _LOGGER.debug( 
    1219                    f"Sending request for google.firestore_v1.FirestoreClient.BatchWrite", 
    1220                    extra={ 
    1221                        "serviceName": "google.firestore.v1.Firestore", 
    1222                        "rpcName": "BatchWrite", 
    1223                        "httpRequest": http_request, 
    1224                        "metadata": http_request["headers"], 
    1225                    }, 
    1226                ) 
    1227 
    1228            # Send the request 
    1229            response = FirestoreRestTransport._BatchWrite._get_response( 
    1230                self._host, 
    1231                metadata, 
    1232                query_params, 
    1233                self._session, 
    1234                timeout, 
    1235                transcoded_request, 
    1236                body, 
    1237            ) 
    1238 
    1239            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    1240            # subclass. 
    1241            if response.status_code >= 400: 
    1242                raise core_exceptions.from_http_response(response) 
    1243 
    1244            # Return the response 
    1245            resp = firestore.BatchWriteResponse() 
    1246            pb_resp = firestore.BatchWriteResponse.pb(resp) 
    1247 
    1248            json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) 
    1249 
    1250            resp = self._interceptor.post_batch_write(resp) 
    1251            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    1252            resp, _ = self._interceptor.post_batch_write_with_metadata( 
    1253                resp, response_metadata 
    1254            ) 
    1255            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1256                logging.DEBUG 
    1257            ):  # pragma: NO COVER 
    1258                try: 
    1259                    response_payload = firestore.BatchWriteResponse.to_json(response) 
    1260                except: 
    1261                    response_payload = None 
    1262                http_response = { 
    1263                    "payload": response_payload, 
    1264                    "headers": dict(response.headers), 
    1265                    "status": response.status_code, 
    1266                } 
    1267                _LOGGER.debug( 
    1268                    "Received response for google.firestore_v1.FirestoreClient.batch_write", 
    1269                    extra={ 
    1270                        "serviceName": "google.firestore.v1.Firestore", 
    1271                        "rpcName": "BatchWrite", 
    1272                        "metadata": http_response["headers"], 
    1273                        "httpResponse": http_response, 
    1274                    }, 
    1275                ) 
    1276            return resp 
    1277 
    1278    class _BeginTransaction( 
    1279        _BaseFirestoreRestTransport._BaseBeginTransaction, FirestoreRestStub 
    1280    ): 
    1281        def __hash__(self): 
    1282            return hash("FirestoreRestTransport.BeginTransaction") 
    1283 
    1284        @staticmethod 
    1285        def _get_response( 
    1286            host, 
    1287            metadata, 
    1288            query_params, 
    1289            session, 
    1290            timeout, 
    1291            transcoded_request, 
    1292            body=None, 
    1293        ): 
    1294            uri = transcoded_request["uri"] 
    1295            method = transcoded_request["method"] 
    1296            headers = dict(metadata) 
    1297            headers["Content-Type"] = "application/json" 
    1298            response = getattr(session, method)( 
    1299                "{host}{uri}".format(host=host, uri=uri), 
    1300                timeout=timeout, 
    1301                headers=headers, 
    1302                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    1303                data=body, 
    1304            ) 
    1305            return response 
    1306 
    1307        def __call__( 
    1308            self, 
    1309            request: firestore.BeginTransactionRequest, 
    1310            *, 
    1311            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    1312            timeout: Optional[float] = None, 
    1313            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    1314        ) -> firestore.BeginTransactionResponse: 
    1315            r"""Call the begin transaction method over HTTP. 
    1316 
    1317            Args: 
    1318                request (~.firestore.BeginTransactionRequest): 
    1319                    The request object. The request for 
    1320                [Firestore.BeginTransaction][google.firestore.v1.Firestore.BeginTransaction]. 
    1321                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    1322                    should be retried. 
    1323                timeout (float): The timeout for this request. 
    1324                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    1325                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    1326                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    1327                    be of type `bytes`. 
    1328 
    1329            Returns: 
    1330                ~.firestore.BeginTransactionResponse: 
    1331                    The response for 
    1332                [Firestore.BeginTransaction][google.firestore.v1.Firestore.BeginTransaction]. 
    1333 
    1334            """ 
    1335 
    1336            http_options = ( 
    1337                _BaseFirestoreRestTransport._BaseBeginTransaction._get_http_options() 
    1338            ) 
    1339 
    1340            request, metadata = self._interceptor.pre_begin_transaction( 
    1341                request, metadata 
    1342            ) 
    1343            transcoded_request = _BaseFirestoreRestTransport._BaseBeginTransaction._get_transcoded_request( 
    1344                http_options, request 
    1345            ) 
    1346 
    1347            body = _BaseFirestoreRestTransport._BaseBeginTransaction._get_request_body_json( 
    1348                transcoded_request 
    1349            ) 
    1350 
    1351            # Jsonify the query params 
    1352            query_params = _BaseFirestoreRestTransport._BaseBeginTransaction._get_query_params_json( 
    1353                transcoded_request 
    1354            ) 
    1355 
    1356            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1357                logging.DEBUG 
    1358            ):  # pragma: NO COVER 
    1359                request_url = "{host}{uri}".format( 
    1360                    host=self._host, uri=transcoded_request["uri"] 
    1361                ) 
    1362                method = transcoded_request["method"] 
    1363                try: 
    1364                    request_payload = type(request).to_json(request) 
    1365                except: 
    1366                    request_payload = None 
    1367                http_request = { 
    1368                    "payload": request_payload, 
    1369                    "requestMethod": method, 
    1370                    "requestUrl": request_url, 
    1371                    "headers": dict(metadata), 
    1372                } 
    1373                _LOGGER.debug( 
    1374                    f"Sending request for google.firestore_v1.FirestoreClient.BeginTransaction", 
    1375                    extra={ 
    1376                        "serviceName": "google.firestore.v1.Firestore", 
    1377                        "rpcName": "BeginTransaction", 
    1378                        "httpRequest": http_request, 
    1379                        "metadata": http_request["headers"], 
    1380                    }, 
    1381                ) 
    1382 
    1383            # Send the request 
    1384            response = FirestoreRestTransport._BeginTransaction._get_response( 
    1385                self._host, 
    1386                metadata, 
    1387                query_params, 
    1388                self._session, 
    1389                timeout, 
    1390                transcoded_request, 
    1391                body, 
    1392            ) 
    1393 
    1394            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    1395            # subclass. 
    1396            if response.status_code >= 400: 
    1397                raise core_exceptions.from_http_response(response) 
    1398 
    1399            # Return the response 
    1400            resp = firestore.BeginTransactionResponse() 
    1401            pb_resp = firestore.BeginTransactionResponse.pb(resp) 
    1402 
    1403            json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) 
    1404 
    1405            resp = self._interceptor.post_begin_transaction(resp) 
    1406            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    1407            resp, _ = self._interceptor.post_begin_transaction_with_metadata( 
    1408                resp, response_metadata 
    1409            ) 
    1410            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1411                logging.DEBUG 
    1412            ):  # pragma: NO COVER 
    1413                try: 
    1414                    response_payload = firestore.BeginTransactionResponse.to_json( 
    1415                        response 
    1416                    ) 
    1417                except: 
    1418                    response_payload = None 
    1419                http_response = { 
    1420                    "payload": response_payload, 
    1421                    "headers": dict(response.headers), 
    1422                    "status": response.status_code, 
    1423                } 
    1424                _LOGGER.debug( 
    1425                    "Received response for google.firestore_v1.FirestoreClient.begin_transaction", 
    1426                    extra={ 
    1427                        "serviceName": "google.firestore.v1.Firestore", 
    1428                        "rpcName": "BeginTransaction", 
    1429                        "metadata": http_response["headers"], 
    1430                        "httpResponse": http_response, 
    1431                    }, 
    1432                ) 
    1433            return resp 
    1434 
    1435    class _Commit(_BaseFirestoreRestTransport._BaseCommit, FirestoreRestStub): 
    1436        def __hash__(self): 
    1437            return hash("FirestoreRestTransport.Commit") 
    1438 
    1439        @staticmethod 
    1440        def _get_response( 
    1441            host, 
    1442            metadata, 
    1443            query_params, 
    1444            session, 
    1445            timeout, 
    1446            transcoded_request, 
    1447            body=None, 
    1448        ): 
    1449            uri = transcoded_request["uri"] 
    1450            method = transcoded_request["method"] 
    1451            headers = dict(metadata) 
    1452            headers["Content-Type"] = "application/json" 
    1453            response = getattr(session, method)( 
    1454                "{host}{uri}".format(host=host, uri=uri), 
    1455                timeout=timeout, 
    1456                headers=headers, 
    1457                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    1458                data=body, 
    1459            ) 
    1460            return response 
    1461 
    1462        def __call__( 
    1463            self, 
    1464            request: firestore.CommitRequest, 
    1465            *, 
    1466            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    1467            timeout: Optional[float] = None, 
    1468            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    1469        ) -> firestore.CommitResponse: 
    1470            r"""Call the commit method over HTTP. 
    1471 
    1472            Args: 
    1473                request (~.firestore.CommitRequest): 
    1474                    The request object. The request for 
    1475                [Firestore.Commit][google.firestore.v1.Firestore.Commit]. 
    1476                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    1477                    should be retried. 
    1478                timeout (float): The timeout for this request. 
    1479                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    1480                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    1481                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    1482                    be of type `bytes`. 
    1483 
    1484            Returns: 
    1485                ~.firestore.CommitResponse: 
    1486                    The response for 
    1487                [Firestore.Commit][google.firestore.v1.Firestore.Commit]. 
    1488 
    1489            """ 
    1490 
    1491            http_options = _BaseFirestoreRestTransport._BaseCommit._get_http_options() 
    1492 
    1493            request, metadata = self._interceptor.pre_commit(request, metadata) 
    1494            transcoded_request = ( 
    1495                _BaseFirestoreRestTransport._BaseCommit._get_transcoded_request( 
    1496                    http_options, request 
    1497                ) 
    1498            ) 
    1499 
    1500            body = _BaseFirestoreRestTransport._BaseCommit._get_request_body_json( 
    1501                transcoded_request 
    1502            ) 
    1503 
    1504            # Jsonify the query params 
    1505            query_params = ( 
    1506                _BaseFirestoreRestTransport._BaseCommit._get_query_params_json( 
    1507                    transcoded_request 
    1508                ) 
    1509            ) 
    1510 
    1511            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1512                logging.DEBUG 
    1513            ):  # pragma: NO COVER 
    1514                request_url = "{host}{uri}".format( 
    1515                    host=self._host, uri=transcoded_request["uri"] 
    1516                ) 
    1517                method = transcoded_request["method"] 
    1518                try: 
    1519                    request_payload = type(request).to_json(request) 
    1520                except: 
    1521                    request_payload = None 
    1522                http_request = { 
    1523                    "payload": request_payload, 
    1524                    "requestMethod": method, 
    1525                    "requestUrl": request_url, 
    1526                    "headers": dict(metadata), 
    1527                } 
    1528                _LOGGER.debug( 
    1529                    f"Sending request for google.firestore_v1.FirestoreClient.Commit", 
    1530                    extra={ 
    1531                        "serviceName": "google.firestore.v1.Firestore", 
    1532                        "rpcName": "Commit", 
    1533                        "httpRequest": http_request, 
    1534                        "metadata": http_request["headers"], 
    1535                    }, 
    1536                ) 
    1537 
    1538            # Send the request 
    1539            response = FirestoreRestTransport._Commit._get_response( 
    1540                self._host, 
    1541                metadata, 
    1542                query_params, 
    1543                self._session, 
    1544                timeout, 
    1545                transcoded_request, 
    1546                body, 
    1547            ) 
    1548 
    1549            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    1550            # subclass. 
    1551            if response.status_code >= 400: 
    1552                raise core_exceptions.from_http_response(response) 
    1553 
    1554            # Return the response 
    1555            resp = firestore.CommitResponse() 
    1556            pb_resp = firestore.CommitResponse.pb(resp) 
    1557 
    1558            json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) 
    1559 
    1560            resp = self._interceptor.post_commit(resp) 
    1561            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    1562            resp, _ = self._interceptor.post_commit_with_metadata( 
    1563                resp, response_metadata 
    1564            ) 
    1565            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1566                logging.DEBUG 
    1567            ):  # pragma: NO COVER 
    1568                try: 
    1569                    response_payload = firestore.CommitResponse.to_json(response) 
    1570                except: 
    1571                    response_payload = None 
    1572                http_response = { 
    1573                    "payload": response_payload, 
    1574                    "headers": dict(response.headers), 
    1575                    "status": response.status_code, 
    1576                } 
    1577                _LOGGER.debug( 
    1578                    "Received response for google.firestore_v1.FirestoreClient.commit", 
    1579                    extra={ 
    1580                        "serviceName": "google.firestore.v1.Firestore", 
    1581                        "rpcName": "Commit", 
    1582                        "metadata": http_response["headers"], 
    1583                        "httpResponse": http_response, 
    1584                    }, 
    1585                ) 
    1586            return resp 
    1587 
    1588    class _CreateDocument( 
    1589        _BaseFirestoreRestTransport._BaseCreateDocument, FirestoreRestStub 
    1590    ): 
    1591        def __hash__(self): 
    1592            return hash("FirestoreRestTransport.CreateDocument") 
    1593 
    1594        @staticmethod 
    1595        def _get_response( 
    1596            host, 
    1597            metadata, 
    1598            query_params, 
    1599            session, 
    1600            timeout, 
    1601            transcoded_request, 
    1602            body=None, 
    1603        ): 
    1604            uri = transcoded_request["uri"] 
    1605            method = transcoded_request["method"] 
    1606            headers = dict(metadata) 
    1607            headers["Content-Type"] = "application/json" 
    1608            response = getattr(session, method)( 
    1609                "{host}{uri}".format(host=host, uri=uri), 
    1610                timeout=timeout, 
    1611                headers=headers, 
    1612                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    1613                data=body, 
    1614            ) 
    1615            return response 
    1616 
    1617        def __call__( 
    1618            self, 
    1619            request: firestore.CreateDocumentRequest, 
    1620            *, 
    1621            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    1622            timeout: Optional[float] = None, 
    1623            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    1624        ) -> document.Document: 
    1625            r"""Call the create document method over HTTP. 
    1626 
    1627            Args: 
    1628                request (~.firestore.CreateDocumentRequest): 
    1629                    The request object. The request for 
    1630                [Firestore.CreateDocument][google.firestore.v1.Firestore.CreateDocument]. 
    1631                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    1632                    should be retried. 
    1633                timeout (float): The timeout for this request. 
    1634                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    1635                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    1636                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    1637                    be of type `bytes`. 
    1638 
    1639            Returns: 
    1640                ~.document.Document: 
    1641                    A Firestore document. 
    1642 
    1643                Must not exceed 1 MiB - 4 bytes. 
    1644 
    1645            """ 
    1646 
    1647            http_options = ( 
    1648                _BaseFirestoreRestTransport._BaseCreateDocument._get_http_options() 
    1649            ) 
    1650 
    1651            request, metadata = self._interceptor.pre_create_document(request, metadata) 
    1652            transcoded_request = ( 
    1653                _BaseFirestoreRestTransport._BaseCreateDocument._get_transcoded_request( 
    1654                    http_options, request 
    1655                ) 
    1656            ) 
    1657 
    1658            body = ( 
    1659                _BaseFirestoreRestTransport._BaseCreateDocument._get_request_body_json( 
    1660                    transcoded_request 
    1661                ) 
    1662            ) 
    1663 
    1664            # Jsonify the query params 
    1665            query_params = ( 
    1666                _BaseFirestoreRestTransport._BaseCreateDocument._get_query_params_json( 
    1667                    transcoded_request 
    1668                ) 
    1669            ) 
    1670 
    1671            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1672                logging.DEBUG 
    1673            ):  # pragma: NO COVER 
    1674                request_url = "{host}{uri}".format( 
    1675                    host=self._host, uri=transcoded_request["uri"] 
    1676                ) 
    1677                method = transcoded_request["method"] 
    1678                try: 
    1679                    request_payload = type(request).to_json(request) 
    1680                except: 
    1681                    request_payload = None 
    1682                http_request = { 
    1683                    "payload": request_payload, 
    1684                    "requestMethod": method, 
    1685                    "requestUrl": request_url, 
    1686                    "headers": dict(metadata), 
    1687                } 
    1688                _LOGGER.debug( 
    1689                    f"Sending request for google.firestore_v1.FirestoreClient.CreateDocument", 
    1690                    extra={ 
    1691                        "serviceName": "google.firestore.v1.Firestore", 
    1692                        "rpcName": "CreateDocument", 
    1693                        "httpRequest": http_request, 
    1694                        "metadata": http_request["headers"], 
    1695                    }, 
    1696                ) 
    1697 
    1698            # Send the request 
    1699            response = FirestoreRestTransport._CreateDocument._get_response( 
    1700                self._host, 
    1701                metadata, 
    1702                query_params, 
    1703                self._session, 
    1704                timeout, 
    1705                transcoded_request, 
    1706                body, 
    1707            ) 
    1708 
    1709            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    1710            # subclass. 
    1711            if response.status_code >= 400: 
    1712                raise core_exceptions.from_http_response(response) 
    1713 
    1714            # Return the response 
    1715            resp = document.Document() 
    1716            pb_resp = document.Document.pb(resp) 
    1717 
    1718            json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) 
    1719 
    1720            resp = self._interceptor.post_create_document(resp) 
    1721            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    1722            resp, _ = self._interceptor.post_create_document_with_metadata( 
    1723                resp, response_metadata 
    1724            ) 
    1725            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1726                logging.DEBUG 
    1727            ):  # pragma: NO COVER 
    1728                try: 
    1729                    response_payload = document.Document.to_json(response) 
    1730                except: 
    1731                    response_payload = None 
    1732                http_response = { 
    1733                    "payload": response_payload, 
    1734                    "headers": dict(response.headers), 
    1735                    "status": response.status_code, 
    1736                } 
    1737                _LOGGER.debug( 
    1738                    "Received response for google.firestore_v1.FirestoreClient.create_document", 
    1739                    extra={ 
    1740                        "serviceName": "google.firestore.v1.Firestore", 
    1741                        "rpcName": "CreateDocument", 
    1742                        "metadata": http_response["headers"], 
    1743                        "httpResponse": http_response, 
    1744                    }, 
    1745                ) 
    1746            return resp 
    1747 
    1748    class _DeleteDocument( 
    1749        _BaseFirestoreRestTransport._BaseDeleteDocument, FirestoreRestStub 
    1750    ): 
    1751        def __hash__(self): 
    1752            return hash("FirestoreRestTransport.DeleteDocument") 
    1753 
    1754        @staticmethod 
    1755        def _get_response( 
    1756            host, 
    1757            metadata, 
    1758            query_params, 
    1759            session, 
    1760            timeout, 
    1761            transcoded_request, 
    1762            body=None, 
    1763        ): 
    1764            uri = transcoded_request["uri"] 
    1765            method = transcoded_request["method"] 
    1766            headers = dict(metadata) 
    1767            headers["Content-Type"] = "application/json" 
    1768            response = getattr(session, method)( 
    1769                "{host}{uri}".format(host=host, uri=uri), 
    1770                timeout=timeout, 
    1771                headers=headers, 
    1772                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    1773            ) 
    1774            return response 
    1775 
    1776        def __call__( 
    1777            self, 
    1778            request: firestore.DeleteDocumentRequest, 
    1779            *, 
    1780            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    1781            timeout: Optional[float] = None, 
    1782            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    1783        ): 
    1784            r"""Call the delete document method over HTTP. 
    1785 
    1786            Args: 
    1787                request (~.firestore.DeleteDocumentRequest): 
    1788                    The request object. The request for 
    1789                [Firestore.DeleteDocument][google.firestore.v1.Firestore.DeleteDocument]. 
    1790                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    1791                    should be retried. 
    1792                timeout (float): The timeout for this request. 
    1793                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    1794                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    1795                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    1796                    be of type `bytes`. 
    1797            """ 
    1798 
    1799            http_options = ( 
    1800                _BaseFirestoreRestTransport._BaseDeleteDocument._get_http_options() 
    1801            ) 
    1802 
    1803            request, metadata = self._interceptor.pre_delete_document(request, metadata) 
    1804            transcoded_request = ( 
    1805                _BaseFirestoreRestTransport._BaseDeleteDocument._get_transcoded_request( 
    1806                    http_options, request 
    1807                ) 
    1808            ) 
    1809 
    1810            # Jsonify the query params 
    1811            query_params = ( 
    1812                _BaseFirestoreRestTransport._BaseDeleteDocument._get_query_params_json( 
    1813                    transcoded_request 
    1814                ) 
    1815            ) 
    1816 
    1817            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1818                logging.DEBUG 
    1819            ):  # pragma: NO COVER 
    1820                request_url = "{host}{uri}".format( 
    1821                    host=self._host, uri=transcoded_request["uri"] 
    1822                ) 
    1823                method = transcoded_request["method"] 
    1824                try: 
    1825                    request_payload = json_format.MessageToJson(request) 
    1826                except: 
    1827                    request_payload = None 
    1828                http_request = { 
    1829                    "payload": request_payload, 
    1830                    "requestMethod": method, 
    1831                    "requestUrl": request_url, 
    1832                    "headers": dict(metadata), 
    1833                } 
    1834                _LOGGER.debug( 
    1835                    f"Sending request for google.firestore_v1.FirestoreClient.DeleteDocument", 
    1836                    extra={ 
    1837                        "serviceName": "google.firestore.v1.Firestore", 
    1838                        "rpcName": "DeleteDocument", 
    1839                        "httpRequest": http_request, 
    1840                        "metadata": http_request["headers"], 
    1841                    }, 
    1842                ) 
    1843 
    1844            # Send the request 
    1845            response = FirestoreRestTransport._DeleteDocument._get_response( 
    1846                self._host, 
    1847                metadata, 
    1848                query_params, 
    1849                self._session, 
    1850                timeout, 
    1851                transcoded_request, 
    1852            ) 
    1853 
    1854            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    1855            # subclass. 
    1856            if response.status_code >= 400: 
    1857                raise core_exceptions.from_http_response(response) 
    1858 
    1859    class _GetDocument(_BaseFirestoreRestTransport._BaseGetDocument, FirestoreRestStub): 
    1860        def __hash__(self): 
    1861            return hash("FirestoreRestTransport.GetDocument") 
    1862 
    1863        @staticmethod 
    1864        def _get_response( 
    1865            host, 
    1866            metadata, 
    1867            query_params, 
    1868            session, 
    1869            timeout, 
    1870            transcoded_request, 
    1871            body=None, 
    1872        ): 
    1873            uri = transcoded_request["uri"] 
    1874            method = transcoded_request["method"] 
    1875            headers = dict(metadata) 
    1876            headers["Content-Type"] = "application/json" 
    1877            response = getattr(session, method)( 
    1878                "{host}{uri}".format(host=host, uri=uri), 
    1879                timeout=timeout, 
    1880                headers=headers, 
    1881                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    1882            ) 
    1883            return response 
    1884 
    1885        def __call__( 
    1886            self, 
    1887            request: firestore.GetDocumentRequest, 
    1888            *, 
    1889            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    1890            timeout: Optional[float] = None, 
    1891            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    1892        ) -> document.Document: 
    1893            r"""Call the get document method over HTTP. 
    1894 
    1895            Args: 
    1896                request (~.firestore.GetDocumentRequest): 
    1897                    The request object. The request for 
    1898                [Firestore.GetDocument][google.firestore.v1.Firestore.GetDocument]. 
    1899                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    1900                    should be retried. 
    1901                timeout (float): The timeout for this request. 
    1902                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    1903                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    1904                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    1905                    be of type `bytes`. 
    1906 
    1907            Returns: 
    1908                ~.document.Document: 
    1909                    A Firestore document. 
    1910 
    1911                Must not exceed 1 MiB - 4 bytes. 
    1912 
    1913            """ 
    1914 
    1915            http_options = ( 
    1916                _BaseFirestoreRestTransport._BaseGetDocument._get_http_options() 
    1917            ) 
    1918 
    1919            request, metadata = self._interceptor.pre_get_document(request, metadata) 
    1920            transcoded_request = ( 
    1921                _BaseFirestoreRestTransport._BaseGetDocument._get_transcoded_request( 
    1922                    http_options, request 
    1923                ) 
    1924            ) 
    1925 
    1926            # Jsonify the query params 
    1927            query_params = ( 
    1928                _BaseFirestoreRestTransport._BaseGetDocument._get_query_params_json( 
    1929                    transcoded_request 
    1930                ) 
    1931            ) 
    1932 
    1933            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1934                logging.DEBUG 
    1935            ):  # pragma: NO COVER 
    1936                request_url = "{host}{uri}".format( 
    1937                    host=self._host, uri=transcoded_request["uri"] 
    1938                ) 
    1939                method = transcoded_request["method"] 
    1940                try: 
    1941                    request_payload = type(request).to_json(request) 
    1942                except: 
    1943                    request_payload = None 
    1944                http_request = { 
    1945                    "payload": request_payload, 
    1946                    "requestMethod": method, 
    1947                    "requestUrl": request_url, 
    1948                    "headers": dict(metadata), 
    1949                } 
    1950                _LOGGER.debug( 
    1951                    f"Sending request for google.firestore_v1.FirestoreClient.GetDocument", 
    1952                    extra={ 
    1953                        "serviceName": "google.firestore.v1.Firestore", 
    1954                        "rpcName": "GetDocument", 
    1955                        "httpRequest": http_request, 
    1956                        "metadata": http_request["headers"], 
    1957                    }, 
    1958                ) 
    1959 
    1960            # Send the request 
    1961            response = FirestoreRestTransport._GetDocument._get_response( 
    1962                self._host, 
    1963                metadata, 
    1964                query_params, 
    1965                self._session, 
    1966                timeout, 
    1967                transcoded_request, 
    1968            ) 
    1969 
    1970            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    1971            # subclass. 
    1972            if response.status_code >= 400: 
    1973                raise core_exceptions.from_http_response(response) 
    1974 
    1975            # Return the response 
    1976            resp = document.Document() 
    1977            pb_resp = document.Document.pb(resp) 
    1978 
    1979            json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) 
    1980 
    1981            resp = self._interceptor.post_get_document(resp) 
    1982            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    1983            resp, _ = self._interceptor.post_get_document_with_metadata( 
    1984                resp, response_metadata 
    1985            ) 
    1986            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    1987                logging.DEBUG 
    1988            ):  # pragma: NO COVER 
    1989                try: 
    1990                    response_payload = document.Document.to_json(response) 
    1991                except: 
    1992                    response_payload = None 
    1993                http_response = { 
    1994                    "payload": response_payload, 
    1995                    "headers": dict(response.headers), 
    1996                    "status": response.status_code, 
    1997                } 
    1998                _LOGGER.debug( 
    1999                    "Received response for google.firestore_v1.FirestoreClient.get_document", 
    2000                    extra={ 
    2001                        "serviceName": "google.firestore.v1.Firestore", 
    2002                        "rpcName": "GetDocument", 
    2003                        "metadata": http_response["headers"], 
    2004                        "httpResponse": http_response, 
    2005                    }, 
    2006                ) 
    2007            return resp 
    2008 
    2009    class _ListCollectionIds( 
    2010        _BaseFirestoreRestTransport._BaseListCollectionIds, FirestoreRestStub 
    2011    ): 
    2012        def __hash__(self): 
    2013            return hash("FirestoreRestTransport.ListCollectionIds") 
    2014 
    2015        @staticmethod 
    2016        def _get_response( 
    2017            host, 
    2018            metadata, 
    2019            query_params, 
    2020            session, 
    2021            timeout, 
    2022            transcoded_request, 
    2023            body=None, 
    2024        ): 
    2025            uri = transcoded_request["uri"] 
    2026            method = transcoded_request["method"] 
    2027            headers = dict(metadata) 
    2028            headers["Content-Type"] = "application/json" 
    2029            response = getattr(session, method)( 
    2030                "{host}{uri}".format(host=host, uri=uri), 
    2031                timeout=timeout, 
    2032                headers=headers, 
    2033                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    2034                data=body, 
    2035            ) 
    2036            return response 
    2037 
    2038        def __call__( 
    2039            self, 
    2040            request: firestore.ListCollectionIdsRequest, 
    2041            *, 
    2042            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    2043            timeout: Optional[float] = None, 
    2044            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    2045        ) -> firestore.ListCollectionIdsResponse: 
    2046            r"""Call the list collection ids method over HTTP. 
    2047 
    2048            Args: 
    2049                request (~.firestore.ListCollectionIdsRequest): 
    2050                    The request object. The request for 
    2051                [Firestore.ListCollectionIds][google.firestore.v1.Firestore.ListCollectionIds]. 
    2052                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    2053                    should be retried. 
    2054                timeout (float): The timeout for this request. 
    2055                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    2056                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    2057                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    2058                    be of type `bytes`. 
    2059 
    2060            Returns: 
    2061                ~.firestore.ListCollectionIdsResponse: 
    2062                    The response from 
    2063                [Firestore.ListCollectionIds][google.firestore.v1.Firestore.ListCollectionIds]. 
    2064 
    2065            """ 
    2066 
    2067            http_options = ( 
    2068                _BaseFirestoreRestTransport._BaseListCollectionIds._get_http_options() 
    2069            ) 
    2070 
    2071            request, metadata = self._interceptor.pre_list_collection_ids( 
    2072                request, metadata 
    2073            ) 
    2074            transcoded_request = _BaseFirestoreRestTransport._BaseListCollectionIds._get_transcoded_request( 
    2075                http_options, request 
    2076            ) 
    2077 
    2078            body = _BaseFirestoreRestTransport._BaseListCollectionIds._get_request_body_json( 
    2079                transcoded_request 
    2080            ) 
    2081 
    2082            # Jsonify the query params 
    2083            query_params = _BaseFirestoreRestTransport._BaseListCollectionIds._get_query_params_json( 
    2084                transcoded_request 
    2085            ) 
    2086 
    2087            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2088                logging.DEBUG 
    2089            ):  # pragma: NO COVER 
    2090                request_url = "{host}{uri}".format( 
    2091                    host=self._host, uri=transcoded_request["uri"] 
    2092                ) 
    2093                method = transcoded_request["method"] 
    2094                try: 
    2095                    request_payload = type(request).to_json(request) 
    2096                except: 
    2097                    request_payload = None 
    2098                http_request = { 
    2099                    "payload": request_payload, 
    2100                    "requestMethod": method, 
    2101                    "requestUrl": request_url, 
    2102                    "headers": dict(metadata), 
    2103                } 
    2104                _LOGGER.debug( 
    2105                    f"Sending request for google.firestore_v1.FirestoreClient.ListCollectionIds", 
    2106                    extra={ 
    2107                        "serviceName": "google.firestore.v1.Firestore", 
    2108                        "rpcName": "ListCollectionIds", 
    2109                        "httpRequest": http_request, 
    2110                        "metadata": http_request["headers"], 
    2111                    }, 
    2112                ) 
    2113 
    2114            # Send the request 
    2115            response = FirestoreRestTransport._ListCollectionIds._get_response( 
    2116                self._host, 
    2117                metadata, 
    2118                query_params, 
    2119                self._session, 
    2120                timeout, 
    2121                transcoded_request, 
    2122                body, 
    2123            ) 
    2124 
    2125            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    2126            # subclass. 
    2127            if response.status_code >= 400: 
    2128                raise core_exceptions.from_http_response(response) 
    2129 
    2130            # Return the response 
    2131            resp = firestore.ListCollectionIdsResponse() 
    2132            pb_resp = firestore.ListCollectionIdsResponse.pb(resp) 
    2133 
    2134            json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) 
    2135 
    2136            resp = self._interceptor.post_list_collection_ids(resp) 
    2137            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    2138            resp, _ = self._interceptor.post_list_collection_ids_with_metadata( 
    2139                resp, response_metadata 
    2140            ) 
    2141            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2142                logging.DEBUG 
    2143            ):  # pragma: NO COVER 
    2144                try: 
    2145                    response_payload = firestore.ListCollectionIdsResponse.to_json( 
    2146                        response 
    2147                    ) 
    2148                except: 
    2149                    response_payload = None 
    2150                http_response = { 
    2151                    "payload": response_payload, 
    2152                    "headers": dict(response.headers), 
    2153                    "status": response.status_code, 
    2154                } 
    2155                _LOGGER.debug( 
    2156                    "Received response for google.firestore_v1.FirestoreClient.list_collection_ids", 
    2157                    extra={ 
    2158                        "serviceName": "google.firestore.v1.Firestore", 
    2159                        "rpcName": "ListCollectionIds", 
    2160                        "metadata": http_response["headers"], 
    2161                        "httpResponse": http_response, 
    2162                    }, 
    2163                ) 
    2164            return resp 
    2165 
    2166    class _ListDocuments( 
    2167        _BaseFirestoreRestTransport._BaseListDocuments, FirestoreRestStub 
    2168    ): 
    2169        def __hash__(self): 
    2170            return hash("FirestoreRestTransport.ListDocuments") 
    2171 
    2172        @staticmethod 
    2173        def _get_response( 
    2174            host, 
    2175            metadata, 
    2176            query_params, 
    2177            session, 
    2178            timeout, 
    2179            transcoded_request, 
    2180            body=None, 
    2181        ): 
    2182            uri = transcoded_request["uri"] 
    2183            method = transcoded_request["method"] 
    2184            headers = dict(metadata) 
    2185            headers["Content-Type"] = "application/json" 
    2186            response = getattr(session, method)( 
    2187                "{host}{uri}".format(host=host, uri=uri), 
    2188                timeout=timeout, 
    2189                headers=headers, 
    2190                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    2191            ) 
    2192            return response 
    2193 
    2194        def __call__( 
    2195            self, 
    2196            request: firestore.ListDocumentsRequest, 
    2197            *, 
    2198            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    2199            timeout: Optional[float] = None, 
    2200            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    2201        ) -> firestore.ListDocumentsResponse: 
    2202            r"""Call the list documents method over HTTP. 
    2203 
    2204            Args: 
    2205                request (~.firestore.ListDocumentsRequest): 
    2206                    The request object. The request for 
    2207                [Firestore.ListDocuments][google.firestore.v1.Firestore.ListDocuments]. 
    2208                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    2209                    should be retried. 
    2210                timeout (float): The timeout for this request. 
    2211                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    2212                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    2213                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    2214                    be of type `bytes`. 
    2215 
    2216            Returns: 
    2217                ~.firestore.ListDocumentsResponse: 
    2218                    The response for 
    2219                [Firestore.ListDocuments][google.firestore.v1.Firestore.ListDocuments]. 
    2220 
    2221            """ 
    2222 
    2223            http_options = ( 
    2224                _BaseFirestoreRestTransport._BaseListDocuments._get_http_options() 
    2225            ) 
    2226 
    2227            request, metadata = self._interceptor.pre_list_documents(request, metadata) 
    2228            transcoded_request = ( 
    2229                _BaseFirestoreRestTransport._BaseListDocuments._get_transcoded_request( 
    2230                    http_options, request 
    2231                ) 
    2232            ) 
    2233 
    2234            # Jsonify the query params 
    2235            query_params = ( 
    2236                _BaseFirestoreRestTransport._BaseListDocuments._get_query_params_json( 
    2237                    transcoded_request 
    2238                ) 
    2239            ) 
    2240 
    2241            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2242                logging.DEBUG 
    2243            ):  # pragma: NO COVER 
    2244                request_url = "{host}{uri}".format( 
    2245                    host=self._host, uri=transcoded_request["uri"] 
    2246                ) 
    2247                method = transcoded_request["method"] 
    2248                try: 
    2249                    request_payload = type(request).to_json(request) 
    2250                except: 
    2251                    request_payload = None 
    2252                http_request = { 
    2253                    "payload": request_payload, 
    2254                    "requestMethod": method, 
    2255                    "requestUrl": request_url, 
    2256                    "headers": dict(metadata), 
    2257                } 
    2258                _LOGGER.debug( 
    2259                    f"Sending request for google.firestore_v1.FirestoreClient.ListDocuments", 
    2260                    extra={ 
    2261                        "serviceName": "google.firestore.v1.Firestore", 
    2262                        "rpcName": "ListDocuments", 
    2263                        "httpRequest": http_request, 
    2264                        "metadata": http_request["headers"], 
    2265                    }, 
    2266                ) 
    2267 
    2268            # Send the request 
    2269            response = FirestoreRestTransport._ListDocuments._get_response( 
    2270                self._host, 
    2271                metadata, 
    2272                query_params, 
    2273                self._session, 
    2274                timeout, 
    2275                transcoded_request, 
    2276            ) 
    2277 
    2278            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    2279            # subclass. 
    2280            if response.status_code >= 400: 
    2281                raise core_exceptions.from_http_response(response) 
    2282 
    2283            # Return the response 
    2284            resp = firestore.ListDocumentsResponse() 
    2285            pb_resp = firestore.ListDocumentsResponse.pb(resp) 
    2286 
    2287            json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) 
    2288 
    2289            resp = self._interceptor.post_list_documents(resp) 
    2290            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    2291            resp, _ = self._interceptor.post_list_documents_with_metadata( 
    2292                resp, response_metadata 
    2293            ) 
    2294            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2295                logging.DEBUG 
    2296            ):  # pragma: NO COVER 
    2297                try: 
    2298                    response_payload = firestore.ListDocumentsResponse.to_json(response) 
    2299                except: 
    2300                    response_payload = None 
    2301                http_response = { 
    2302                    "payload": response_payload, 
    2303                    "headers": dict(response.headers), 
    2304                    "status": response.status_code, 
    2305                } 
    2306                _LOGGER.debug( 
    2307                    "Received response for google.firestore_v1.FirestoreClient.list_documents", 
    2308                    extra={ 
    2309                        "serviceName": "google.firestore.v1.Firestore", 
    2310                        "rpcName": "ListDocuments", 
    2311                        "metadata": http_response["headers"], 
    2312                        "httpResponse": http_response, 
    2313                    }, 
    2314                ) 
    2315            return resp 
    2316 
    2317    class _Listen(_BaseFirestoreRestTransport._BaseListen, FirestoreRestStub): 
    2318        def __hash__(self): 
    2319            return hash("FirestoreRestTransport.Listen") 
    2320 
    2321        def __call__( 
    2322            self, 
    2323            request: firestore.ListenRequest, 
    2324            *, 
    2325            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    2326            timeout: Optional[float] = None, 
    2327            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    2328        ) -> rest_streaming.ResponseIterator: 
    2329            raise NotImplementedError( 
    2330                "Method Listen is not available over REST transport" 
    2331            ) 
    2332 
    2333    class _PartitionQuery( 
    2334        _BaseFirestoreRestTransport._BasePartitionQuery, FirestoreRestStub 
    2335    ): 
    2336        def __hash__(self): 
    2337            return hash("FirestoreRestTransport.PartitionQuery") 
    2338 
    2339        @staticmethod 
    2340        def _get_response( 
    2341            host, 
    2342            metadata, 
    2343            query_params, 
    2344            session, 
    2345            timeout, 
    2346            transcoded_request, 
    2347            body=None, 
    2348        ): 
    2349            uri = transcoded_request["uri"] 
    2350            method = transcoded_request["method"] 
    2351            headers = dict(metadata) 
    2352            headers["Content-Type"] = "application/json" 
    2353            response = getattr(session, method)( 
    2354                "{host}{uri}".format(host=host, uri=uri), 
    2355                timeout=timeout, 
    2356                headers=headers, 
    2357                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    2358                data=body, 
    2359            ) 
    2360            return response 
    2361 
    2362        def __call__( 
    2363            self, 
    2364            request: firestore.PartitionQueryRequest, 
    2365            *, 
    2366            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    2367            timeout: Optional[float] = None, 
    2368            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    2369        ) -> firestore.PartitionQueryResponse: 
    2370            r"""Call the partition query method over HTTP. 
    2371 
    2372            Args: 
    2373                request (~.firestore.PartitionQueryRequest): 
    2374                    The request object. The request for 
    2375                [Firestore.PartitionQuery][google.firestore.v1.Firestore.PartitionQuery]. 
    2376                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    2377                    should be retried. 
    2378                timeout (float): The timeout for this request. 
    2379                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    2380                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    2381                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    2382                    be of type `bytes`. 
    2383 
    2384            Returns: 
    2385                ~.firestore.PartitionQueryResponse: 
    2386                    The response for 
    2387                [Firestore.PartitionQuery][google.firestore.v1.Firestore.PartitionQuery]. 
    2388 
    2389            """ 
    2390 
    2391            http_options = ( 
    2392                _BaseFirestoreRestTransport._BasePartitionQuery._get_http_options() 
    2393            ) 
    2394 
    2395            request, metadata = self._interceptor.pre_partition_query(request, metadata) 
    2396            transcoded_request = ( 
    2397                _BaseFirestoreRestTransport._BasePartitionQuery._get_transcoded_request( 
    2398                    http_options, request 
    2399                ) 
    2400            ) 
    2401 
    2402            body = ( 
    2403                _BaseFirestoreRestTransport._BasePartitionQuery._get_request_body_json( 
    2404                    transcoded_request 
    2405                ) 
    2406            ) 
    2407 
    2408            # Jsonify the query params 
    2409            query_params = ( 
    2410                _BaseFirestoreRestTransport._BasePartitionQuery._get_query_params_json( 
    2411                    transcoded_request 
    2412                ) 
    2413            ) 
    2414 
    2415            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2416                logging.DEBUG 
    2417            ):  # pragma: NO COVER 
    2418                request_url = "{host}{uri}".format( 
    2419                    host=self._host, uri=transcoded_request["uri"] 
    2420                ) 
    2421                method = transcoded_request["method"] 
    2422                try: 
    2423                    request_payload = type(request).to_json(request) 
    2424                except: 
    2425                    request_payload = None 
    2426                http_request = { 
    2427                    "payload": request_payload, 
    2428                    "requestMethod": method, 
    2429                    "requestUrl": request_url, 
    2430                    "headers": dict(metadata), 
    2431                } 
    2432                _LOGGER.debug( 
    2433                    f"Sending request for google.firestore_v1.FirestoreClient.PartitionQuery", 
    2434                    extra={ 
    2435                        "serviceName": "google.firestore.v1.Firestore", 
    2436                        "rpcName": "PartitionQuery", 
    2437                        "httpRequest": http_request, 
    2438                        "metadata": http_request["headers"], 
    2439                    }, 
    2440                ) 
    2441 
    2442            # Send the request 
    2443            response = FirestoreRestTransport._PartitionQuery._get_response( 
    2444                self._host, 
    2445                metadata, 
    2446                query_params, 
    2447                self._session, 
    2448                timeout, 
    2449                transcoded_request, 
    2450                body, 
    2451            ) 
    2452 
    2453            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    2454            # subclass. 
    2455            if response.status_code >= 400: 
    2456                raise core_exceptions.from_http_response(response) 
    2457 
    2458            # Return the response 
    2459            resp = firestore.PartitionQueryResponse() 
    2460            pb_resp = firestore.PartitionQueryResponse.pb(resp) 
    2461 
    2462            json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) 
    2463 
    2464            resp = self._interceptor.post_partition_query(resp) 
    2465            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    2466            resp, _ = self._interceptor.post_partition_query_with_metadata( 
    2467                resp, response_metadata 
    2468            ) 
    2469            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2470                logging.DEBUG 
    2471            ):  # pragma: NO COVER 
    2472                try: 
    2473                    response_payload = firestore.PartitionQueryResponse.to_json( 
    2474                        response 
    2475                    ) 
    2476                except: 
    2477                    response_payload = None 
    2478                http_response = { 
    2479                    "payload": response_payload, 
    2480                    "headers": dict(response.headers), 
    2481                    "status": response.status_code, 
    2482                } 
    2483                _LOGGER.debug( 
    2484                    "Received response for google.firestore_v1.FirestoreClient.partition_query", 
    2485                    extra={ 
    2486                        "serviceName": "google.firestore.v1.Firestore", 
    2487                        "rpcName": "PartitionQuery", 
    2488                        "metadata": http_response["headers"], 
    2489                        "httpResponse": http_response, 
    2490                    }, 
    2491                ) 
    2492            return resp 
    2493 
    2494    class _Rollback(_BaseFirestoreRestTransport._BaseRollback, FirestoreRestStub): 
    2495        def __hash__(self): 
    2496            return hash("FirestoreRestTransport.Rollback") 
    2497 
    2498        @staticmethod 
    2499        def _get_response( 
    2500            host, 
    2501            metadata, 
    2502            query_params, 
    2503            session, 
    2504            timeout, 
    2505            transcoded_request, 
    2506            body=None, 
    2507        ): 
    2508            uri = transcoded_request["uri"] 
    2509            method = transcoded_request["method"] 
    2510            headers = dict(metadata) 
    2511            headers["Content-Type"] = "application/json" 
    2512            response = getattr(session, method)( 
    2513                "{host}{uri}".format(host=host, uri=uri), 
    2514                timeout=timeout, 
    2515                headers=headers, 
    2516                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    2517                data=body, 
    2518            ) 
    2519            return response 
    2520 
    2521        def __call__( 
    2522            self, 
    2523            request: firestore.RollbackRequest, 
    2524            *, 
    2525            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    2526            timeout: Optional[float] = None, 
    2527            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    2528        ): 
    2529            r"""Call the rollback method over HTTP. 
    2530 
    2531            Args: 
    2532                request (~.firestore.RollbackRequest): 
    2533                    The request object. The request for 
    2534                [Firestore.Rollback][google.firestore.v1.Firestore.Rollback]. 
    2535                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    2536                    should be retried. 
    2537                timeout (float): The timeout for this request. 
    2538                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    2539                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    2540                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    2541                    be of type `bytes`. 
    2542            """ 
    2543 
    2544            http_options = _BaseFirestoreRestTransport._BaseRollback._get_http_options() 
    2545 
    2546            request, metadata = self._interceptor.pre_rollback(request, metadata) 
    2547            transcoded_request = ( 
    2548                _BaseFirestoreRestTransport._BaseRollback._get_transcoded_request( 
    2549                    http_options, request 
    2550                ) 
    2551            ) 
    2552 
    2553            body = _BaseFirestoreRestTransport._BaseRollback._get_request_body_json( 
    2554                transcoded_request 
    2555            ) 
    2556 
    2557            # Jsonify the query params 
    2558            query_params = ( 
    2559                _BaseFirestoreRestTransport._BaseRollback._get_query_params_json( 
    2560                    transcoded_request 
    2561                ) 
    2562            ) 
    2563 
    2564            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2565                logging.DEBUG 
    2566            ):  # pragma: NO COVER 
    2567                request_url = "{host}{uri}".format( 
    2568                    host=self._host, uri=transcoded_request["uri"] 
    2569                ) 
    2570                method = transcoded_request["method"] 
    2571                try: 
    2572                    request_payload = json_format.MessageToJson(request) 
    2573                except: 
    2574                    request_payload = None 
    2575                http_request = { 
    2576                    "payload": request_payload, 
    2577                    "requestMethod": method, 
    2578                    "requestUrl": request_url, 
    2579                    "headers": dict(metadata), 
    2580                } 
    2581                _LOGGER.debug( 
    2582                    f"Sending request for google.firestore_v1.FirestoreClient.Rollback", 
    2583                    extra={ 
    2584                        "serviceName": "google.firestore.v1.Firestore", 
    2585                        "rpcName": "Rollback", 
    2586                        "httpRequest": http_request, 
    2587                        "metadata": http_request["headers"], 
    2588                    }, 
    2589                ) 
    2590 
    2591            # Send the request 
    2592            response = FirestoreRestTransport._Rollback._get_response( 
    2593                self._host, 
    2594                metadata, 
    2595                query_params, 
    2596                self._session, 
    2597                timeout, 
    2598                transcoded_request, 
    2599                body, 
    2600            ) 
    2601 
    2602            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    2603            # subclass. 
    2604            if response.status_code >= 400: 
    2605                raise core_exceptions.from_http_response(response) 
    2606 
    2607    class _RunAggregationQuery( 
    2608        _BaseFirestoreRestTransport._BaseRunAggregationQuery, FirestoreRestStub 
    2609    ): 
    2610        def __hash__(self): 
    2611            return hash("FirestoreRestTransport.RunAggregationQuery") 
    2612 
    2613        @staticmethod 
    2614        def _get_response( 
    2615            host, 
    2616            metadata, 
    2617            query_params, 
    2618            session, 
    2619            timeout, 
    2620            transcoded_request, 
    2621            body=None, 
    2622        ): 
    2623            uri = transcoded_request["uri"] 
    2624            method = transcoded_request["method"] 
    2625            headers = dict(metadata) 
    2626            headers["Content-Type"] = "application/json" 
    2627            response = getattr(session, method)( 
    2628                "{host}{uri}".format(host=host, uri=uri), 
    2629                timeout=timeout, 
    2630                headers=headers, 
    2631                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    2632                data=body, 
    2633                stream=True, 
    2634            ) 
    2635            return response 
    2636 
    2637        def __call__( 
    2638            self, 
    2639            request: firestore.RunAggregationQueryRequest, 
    2640            *, 
    2641            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    2642            timeout: Optional[float] = None, 
    2643            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    2644        ) -> rest_streaming.ResponseIterator: 
    2645            r"""Call the run aggregation query method over HTTP. 
    2646 
    2647            Args: 
    2648                request (~.firestore.RunAggregationQueryRequest): 
    2649                    The request object. The request for 
    2650                [Firestore.RunAggregationQuery][google.firestore.v1.Firestore.RunAggregationQuery]. 
    2651                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    2652                    should be retried. 
    2653                timeout (float): The timeout for this request. 
    2654                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    2655                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    2656                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    2657                    be of type `bytes`. 
    2658 
    2659            Returns: 
    2660                ~.firestore.RunAggregationQueryResponse: 
    2661                    The response for 
    2662                [Firestore.RunAggregationQuery][google.firestore.v1.Firestore.RunAggregationQuery]. 
    2663 
    2664            """ 
    2665 
    2666            http_options = ( 
    2667                _BaseFirestoreRestTransport._BaseRunAggregationQuery._get_http_options() 
    2668            ) 
    2669 
    2670            request, metadata = self._interceptor.pre_run_aggregation_query( 
    2671                request, metadata 
    2672            ) 
    2673            transcoded_request = _BaseFirestoreRestTransport._BaseRunAggregationQuery._get_transcoded_request( 
    2674                http_options, request 
    2675            ) 
    2676 
    2677            body = _BaseFirestoreRestTransport._BaseRunAggregationQuery._get_request_body_json( 
    2678                transcoded_request 
    2679            ) 
    2680 
    2681            # Jsonify the query params 
    2682            query_params = _BaseFirestoreRestTransport._BaseRunAggregationQuery._get_query_params_json( 
    2683                transcoded_request 
    2684            ) 
    2685 
    2686            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2687                logging.DEBUG 
    2688            ):  # pragma: NO COVER 
    2689                request_url = "{host}{uri}".format( 
    2690                    host=self._host, uri=transcoded_request["uri"] 
    2691                ) 
    2692                method = transcoded_request["method"] 
    2693                try: 
    2694                    request_payload = type(request).to_json(request) 
    2695                except: 
    2696                    request_payload = None 
    2697                http_request = { 
    2698                    "payload": request_payload, 
    2699                    "requestMethod": method, 
    2700                    "requestUrl": request_url, 
    2701                    "headers": dict(metadata), 
    2702                } 
    2703                _LOGGER.debug( 
    2704                    f"Sending request for google.firestore_v1.FirestoreClient.RunAggregationQuery", 
    2705                    extra={ 
    2706                        "serviceName": "google.firestore.v1.Firestore", 
    2707                        "rpcName": "RunAggregationQuery", 
    2708                        "httpRequest": http_request, 
    2709                        "metadata": http_request["headers"], 
    2710                    }, 
    2711                ) 
    2712 
    2713            # Send the request 
    2714            response = FirestoreRestTransport._RunAggregationQuery._get_response( 
    2715                self._host, 
    2716                metadata, 
    2717                query_params, 
    2718                self._session, 
    2719                timeout, 
    2720                transcoded_request, 
    2721                body, 
    2722            ) 
    2723 
    2724            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    2725            # subclass. 
    2726            if response.status_code >= 400: 
    2727                raise core_exceptions.from_http_response(response) 
    2728 
    2729            # Return the response 
    2730            resp = rest_streaming.ResponseIterator( 
    2731                response, firestore.RunAggregationQueryResponse 
    2732            ) 
    2733 
    2734            resp = self._interceptor.post_run_aggregation_query(resp) 
    2735            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    2736            resp, _ = self._interceptor.post_run_aggregation_query_with_metadata( 
    2737                resp, response_metadata 
    2738            ) 
    2739            return resp 
    2740 
    2741    class _RunQuery(_BaseFirestoreRestTransport._BaseRunQuery, FirestoreRestStub): 
    2742        def __hash__(self): 
    2743            return hash("FirestoreRestTransport.RunQuery") 
    2744 
    2745        @staticmethod 
    2746        def _get_response( 
    2747            host, 
    2748            metadata, 
    2749            query_params, 
    2750            session, 
    2751            timeout, 
    2752            transcoded_request, 
    2753            body=None, 
    2754        ): 
    2755            uri = transcoded_request["uri"] 
    2756            method = transcoded_request["method"] 
    2757            headers = dict(metadata) 
    2758            headers["Content-Type"] = "application/json" 
    2759            response = getattr(session, method)( 
    2760                "{host}{uri}".format(host=host, uri=uri), 
    2761                timeout=timeout, 
    2762                headers=headers, 
    2763                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    2764                data=body, 
    2765                stream=True, 
    2766            ) 
    2767            return response 
    2768 
    2769        def __call__( 
    2770            self, 
    2771            request: firestore.RunQueryRequest, 
    2772            *, 
    2773            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    2774            timeout: Optional[float] = None, 
    2775            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    2776        ) -> rest_streaming.ResponseIterator: 
    2777            r"""Call the run query method over HTTP. 
    2778 
    2779            Args: 
    2780                request (~.firestore.RunQueryRequest): 
    2781                    The request object. The request for 
    2782                [Firestore.RunQuery][google.firestore.v1.Firestore.RunQuery]. 
    2783                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    2784                    should be retried. 
    2785                timeout (float): The timeout for this request. 
    2786                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    2787                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    2788                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    2789                    be of type `bytes`. 
    2790 
    2791            Returns: 
    2792                ~.firestore.RunQueryResponse: 
    2793                    The response for 
    2794                [Firestore.RunQuery][google.firestore.v1.Firestore.RunQuery]. 
    2795 
    2796            """ 
    2797 
    2798            http_options = _BaseFirestoreRestTransport._BaseRunQuery._get_http_options() 
    2799 
    2800            request, metadata = self._interceptor.pre_run_query(request, metadata) 
    2801            transcoded_request = ( 
    2802                _BaseFirestoreRestTransport._BaseRunQuery._get_transcoded_request( 
    2803                    http_options, request 
    2804                ) 
    2805            ) 
    2806 
    2807            body = _BaseFirestoreRestTransport._BaseRunQuery._get_request_body_json( 
    2808                transcoded_request 
    2809            ) 
    2810 
    2811            # Jsonify the query params 
    2812            query_params = ( 
    2813                _BaseFirestoreRestTransport._BaseRunQuery._get_query_params_json( 
    2814                    transcoded_request 
    2815                ) 
    2816            ) 
    2817 
    2818            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2819                logging.DEBUG 
    2820            ):  # pragma: NO COVER 
    2821                request_url = "{host}{uri}".format( 
    2822                    host=self._host, uri=transcoded_request["uri"] 
    2823                ) 
    2824                method = transcoded_request["method"] 
    2825                try: 
    2826                    request_payload = type(request).to_json(request) 
    2827                except: 
    2828                    request_payload = None 
    2829                http_request = { 
    2830                    "payload": request_payload, 
    2831                    "requestMethod": method, 
    2832                    "requestUrl": request_url, 
    2833                    "headers": dict(metadata), 
    2834                } 
    2835                _LOGGER.debug( 
    2836                    f"Sending request for google.firestore_v1.FirestoreClient.RunQuery", 
    2837                    extra={ 
    2838                        "serviceName": "google.firestore.v1.Firestore", 
    2839                        "rpcName": "RunQuery", 
    2840                        "httpRequest": http_request, 
    2841                        "metadata": http_request["headers"], 
    2842                    }, 
    2843                ) 
    2844 
    2845            # Send the request 
    2846            response = FirestoreRestTransport._RunQuery._get_response( 
    2847                self._host, 
    2848                metadata, 
    2849                query_params, 
    2850                self._session, 
    2851                timeout, 
    2852                transcoded_request, 
    2853                body, 
    2854            ) 
    2855 
    2856            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    2857            # subclass. 
    2858            if response.status_code >= 400: 
    2859                raise core_exceptions.from_http_response(response) 
    2860 
    2861            # Return the response 
    2862            resp = rest_streaming.ResponseIterator(response, firestore.RunQueryResponse) 
    2863 
    2864            resp = self._interceptor.post_run_query(resp) 
    2865            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    2866            resp, _ = self._interceptor.post_run_query_with_metadata( 
    2867                resp, response_metadata 
    2868            ) 
    2869            return resp 
    2870 
    2871    class _UpdateDocument( 
    2872        _BaseFirestoreRestTransport._BaseUpdateDocument, FirestoreRestStub 
    2873    ): 
    2874        def __hash__(self): 
    2875            return hash("FirestoreRestTransport.UpdateDocument") 
    2876 
    2877        @staticmethod 
    2878        def _get_response( 
    2879            host, 
    2880            metadata, 
    2881            query_params, 
    2882            session, 
    2883            timeout, 
    2884            transcoded_request, 
    2885            body=None, 
    2886        ): 
    2887            uri = transcoded_request["uri"] 
    2888            method = transcoded_request["method"] 
    2889            headers = dict(metadata) 
    2890            headers["Content-Type"] = "application/json" 
    2891            response = getattr(session, method)( 
    2892                "{host}{uri}".format(host=host, uri=uri), 
    2893                timeout=timeout, 
    2894                headers=headers, 
    2895                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    2896                data=body, 
    2897            ) 
    2898            return response 
    2899 
    2900        def __call__( 
    2901            self, 
    2902            request: firestore.UpdateDocumentRequest, 
    2903            *, 
    2904            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    2905            timeout: Optional[float] = None, 
    2906            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    2907        ) -> gf_document.Document: 
    2908            r"""Call the update document method over HTTP. 
    2909 
    2910            Args: 
    2911                request (~.firestore.UpdateDocumentRequest): 
    2912                    The request object. The request for 
    2913                [Firestore.UpdateDocument][google.firestore.v1.Firestore.UpdateDocument]. 
    2914                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    2915                    should be retried. 
    2916                timeout (float): The timeout for this request. 
    2917                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    2918                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    2919                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    2920                    be of type `bytes`. 
    2921 
    2922            Returns: 
    2923                ~.gf_document.Document: 
    2924                    A Firestore document. 
    2925 
    2926                Must not exceed 1 MiB - 4 bytes. 
    2927 
    2928            """ 
    2929 
    2930            http_options = ( 
    2931                _BaseFirestoreRestTransport._BaseUpdateDocument._get_http_options() 
    2932            ) 
    2933 
    2934            request, metadata = self._interceptor.pre_update_document(request, metadata) 
    2935            transcoded_request = ( 
    2936                _BaseFirestoreRestTransport._BaseUpdateDocument._get_transcoded_request( 
    2937                    http_options, request 
    2938                ) 
    2939            ) 
    2940 
    2941            body = ( 
    2942                _BaseFirestoreRestTransport._BaseUpdateDocument._get_request_body_json( 
    2943                    transcoded_request 
    2944                ) 
    2945            ) 
    2946 
    2947            # Jsonify the query params 
    2948            query_params = ( 
    2949                _BaseFirestoreRestTransport._BaseUpdateDocument._get_query_params_json( 
    2950                    transcoded_request 
    2951                ) 
    2952            ) 
    2953 
    2954            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    2955                logging.DEBUG 
    2956            ):  # pragma: NO COVER 
    2957                request_url = "{host}{uri}".format( 
    2958                    host=self._host, uri=transcoded_request["uri"] 
    2959                ) 
    2960                method = transcoded_request["method"] 
    2961                try: 
    2962                    request_payload = type(request).to_json(request) 
    2963                except: 
    2964                    request_payload = None 
    2965                http_request = { 
    2966                    "payload": request_payload, 
    2967                    "requestMethod": method, 
    2968                    "requestUrl": request_url, 
    2969                    "headers": dict(metadata), 
    2970                } 
    2971                _LOGGER.debug( 
    2972                    f"Sending request for google.firestore_v1.FirestoreClient.UpdateDocument", 
    2973                    extra={ 
    2974                        "serviceName": "google.firestore.v1.Firestore", 
    2975                        "rpcName": "UpdateDocument", 
    2976                        "httpRequest": http_request, 
    2977                        "metadata": http_request["headers"], 
    2978                    }, 
    2979                ) 
    2980 
    2981            # Send the request 
    2982            response = FirestoreRestTransport._UpdateDocument._get_response( 
    2983                self._host, 
    2984                metadata, 
    2985                query_params, 
    2986                self._session, 
    2987                timeout, 
    2988                transcoded_request, 
    2989                body, 
    2990            ) 
    2991 
    2992            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    2993            # subclass. 
    2994            if response.status_code >= 400: 
    2995                raise core_exceptions.from_http_response(response) 
    2996 
    2997            # Return the response 
    2998            resp = gf_document.Document() 
    2999            pb_resp = gf_document.Document.pb(resp) 
    3000 
    3001            json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) 
    3002 
    3003            resp = self._interceptor.post_update_document(resp) 
    3004            response_metadata = [(k, str(v)) for k, v in response.headers.items()] 
    3005            resp, _ = self._interceptor.post_update_document_with_metadata( 
    3006                resp, response_metadata 
    3007            ) 
    3008            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    3009                logging.DEBUG 
    3010            ):  # pragma: NO COVER 
    3011                try: 
    3012                    response_payload = gf_document.Document.to_json(response) 
    3013                except: 
    3014                    response_payload = None 
    3015                http_response = { 
    3016                    "payload": response_payload, 
    3017                    "headers": dict(response.headers), 
    3018                    "status": response.status_code, 
    3019                } 
    3020                _LOGGER.debug( 
    3021                    "Received response for google.firestore_v1.FirestoreClient.update_document", 
    3022                    extra={ 
    3023                        "serviceName": "google.firestore.v1.Firestore", 
    3024                        "rpcName": "UpdateDocument", 
    3025                        "metadata": http_response["headers"], 
    3026                        "httpResponse": http_response, 
    3027                    }, 
    3028                ) 
    3029            return resp 
    3030 
    3031    class _Write(_BaseFirestoreRestTransport._BaseWrite, FirestoreRestStub): 
    3032        def __hash__(self): 
    3033            return hash("FirestoreRestTransport.Write") 
    3034 
    3035        def __call__( 
    3036            self, 
    3037            request: firestore.WriteRequest, 
    3038            *, 
    3039            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    3040            timeout: Optional[float] = None, 
    3041            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    3042        ) -> rest_streaming.ResponseIterator: 
    3043            raise NotImplementedError( 
    3044                "Method Write is not available over REST transport" 
    3045            ) 
    3046 
    3047    @property 
    3048    def batch_get_documents( 
    3049        self, 
    3050    ) -> Callable[ 
    3051        [firestore.BatchGetDocumentsRequest], firestore.BatchGetDocumentsResponse 
    3052    ]: 
    3053        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3054        # In C++ this would require a dynamic_cast 
    3055        return self._BatchGetDocuments(self._session, self._host, self._interceptor)  # type: ignore 
    3056 
    3057    @property 
    3058    def batch_write( 
    3059        self, 
    3060    ) -> Callable[[firestore.BatchWriteRequest], firestore.BatchWriteResponse]: 
    3061        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3062        # In C++ this would require a dynamic_cast 
    3063        return self._BatchWrite(self._session, self._host, self._interceptor)  # type: ignore 
    3064 
    3065    @property 
    3066    def begin_transaction( 
    3067        self, 
    3068    ) -> Callable[ 
    3069        [firestore.BeginTransactionRequest], firestore.BeginTransactionResponse 
    3070    ]: 
    3071        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3072        # In C++ this would require a dynamic_cast 
    3073        return self._BeginTransaction(self._session, self._host, self._interceptor)  # type: ignore 
    3074 
    3075    @property 
    3076    def commit(self) -> Callable[[firestore.CommitRequest], firestore.CommitResponse]: 
    3077        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3078        # In C++ this would require a dynamic_cast 
    3079        return self._Commit(self._session, self._host, self._interceptor)  # type: ignore 
    3080 
    3081    @property 
    3082    def create_document( 
    3083        self, 
    3084    ) -> Callable[[firestore.CreateDocumentRequest], document.Document]: 
    3085        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3086        # In C++ this would require a dynamic_cast 
    3087        return self._CreateDocument(self._session, self._host, self._interceptor)  # type: ignore 
    3088 
    3089    @property 
    3090    def delete_document( 
    3091        self, 
    3092    ) -> Callable[[firestore.DeleteDocumentRequest], empty_pb2.Empty]: 
    3093        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3094        # In C++ this would require a dynamic_cast 
    3095        return self._DeleteDocument(self._session, self._host, self._interceptor)  # type: ignore 
    3096 
    3097    @property 
    3098    def get_document( 
    3099        self, 
    3100    ) -> Callable[[firestore.GetDocumentRequest], document.Document]: 
    3101        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3102        # In C++ this would require a dynamic_cast 
    3103        return self._GetDocument(self._session, self._host, self._interceptor)  # type: ignore 
    3104 
    3105    @property 
    3106    def list_collection_ids( 
    3107        self, 
    3108    ) -> Callable[ 
    3109        [firestore.ListCollectionIdsRequest], firestore.ListCollectionIdsResponse 
    3110    ]: 
    3111        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3112        # In C++ this would require a dynamic_cast 
    3113        return self._ListCollectionIds(self._session, self._host, self._interceptor)  # type: ignore 
    3114 
    3115    @property 
    3116    def list_documents( 
    3117        self, 
    3118    ) -> Callable[[firestore.ListDocumentsRequest], firestore.ListDocumentsResponse]: 
    3119        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3120        # In C++ this would require a dynamic_cast 
    3121        return self._ListDocuments(self._session, self._host, self._interceptor)  # type: ignore 
    3122 
    3123    @property 
    3124    def listen(self) -> Callable[[firestore.ListenRequest], firestore.ListenResponse]: 
    3125        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3126        # In C++ this would require a dynamic_cast 
    3127        return self._Listen(self._session, self._host, self._interceptor)  # type: ignore 
    3128 
    3129    @property 
    3130    def partition_query( 
    3131        self, 
    3132    ) -> Callable[[firestore.PartitionQueryRequest], firestore.PartitionQueryResponse]: 
    3133        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3134        # In C++ this would require a dynamic_cast 
    3135        return self._PartitionQuery(self._session, self._host, self._interceptor)  # type: ignore 
    3136 
    3137    @property 
    3138    def rollback(self) -> Callable[[firestore.RollbackRequest], empty_pb2.Empty]: 
    3139        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3140        # In C++ this would require a dynamic_cast 
    3141        return self._Rollback(self._session, self._host, self._interceptor)  # type: ignore 
    3142 
    3143    @property 
    3144    def run_aggregation_query( 
    3145        self, 
    3146    ) -> Callable[ 
    3147        [firestore.RunAggregationQueryRequest], firestore.RunAggregationQueryResponse 
    3148    ]: 
    3149        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3150        # In C++ this would require a dynamic_cast 
    3151        return self._RunAggregationQuery(self._session, self._host, self._interceptor)  # type: ignore 
    3152 
    3153    @property 
    3154    def run_query( 
    3155        self, 
    3156    ) -> Callable[[firestore.RunQueryRequest], firestore.RunQueryResponse]: 
    3157        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3158        # In C++ this would require a dynamic_cast 
    3159        return self._RunQuery(self._session, self._host, self._interceptor)  # type: ignore 
    3160 
    3161    @property 
    3162    def update_document( 
    3163        self, 
    3164    ) -> Callable[[firestore.UpdateDocumentRequest], gf_document.Document]: 
    3165        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3166        # In C++ this would require a dynamic_cast 
    3167        return self._UpdateDocument(self._session, self._host, self._interceptor)  # type: ignore 
    3168 
    3169    @property 
    3170    def write(self) -> Callable[[firestore.WriteRequest], firestore.WriteResponse]: 
    3171        # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. 
    3172        # In C++ this would require a dynamic_cast 
    3173        return self._Write(self._session, self._host, self._interceptor)  # type: ignore 
    3174 
    3175    @property 
    3176    def cancel_operation(self): 
    3177        return self._CancelOperation(self._session, self._host, self._interceptor)  # type: ignore 
    3178 
    3179    class _CancelOperation( 
    3180        _BaseFirestoreRestTransport._BaseCancelOperation, FirestoreRestStub 
    3181    ): 
    3182        def __hash__(self): 
    3183            return hash("FirestoreRestTransport.CancelOperation") 
    3184 
    3185        @staticmethod 
    3186        def _get_response( 
    3187            host, 
    3188            metadata, 
    3189            query_params, 
    3190            session, 
    3191            timeout, 
    3192            transcoded_request, 
    3193            body=None, 
    3194        ): 
    3195            uri = transcoded_request["uri"] 
    3196            method = transcoded_request["method"] 
    3197            headers = dict(metadata) 
    3198            headers["Content-Type"] = "application/json" 
    3199            response = getattr(session, method)( 
    3200                "{host}{uri}".format(host=host, uri=uri), 
    3201                timeout=timeout, 
    3202                headers=headers, 
    3203                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    3204                data=body, 
    3205            ) 
    3206            return response 
    3207 
    3208        def __call__( 
    3209            self, 
    3210            request: operations_pb2.CancelOperationRequest, 
    3211            *, 
    3212            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    3213            timeout: Optional[float] = None, 
    3214            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    3215        ) -> None: 
    3216            r"""Call the cancel operation method over HTTP. 
    3217 
    3218            Args: 
    3219                request (operations_pb2.CancelOperationRequest): 
    3220                    The request object for CancelOperation method. 
    3221                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    3222                    should be retried. 
    3223                timeout (float): The timeout for this request. 
    3224                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    3225                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    3226                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    3227                    be of type `bytes`. 
    3228            """ 
    3229 
    3230            http_options = ( 
    3231                _BaseFirestoreRestTransport._BaseCancelOperation._get_http_options() 
    3232            ) 
    3233 
    3234            request, metadata = self._interceptor.pre_cancel_operation( 
    3235                request, metadata 
    3236            ) 
    3237            transcoded_request = _BaseFirestoreRestTransport._BaseCancelOperation._get_transcoded_request( 
    3238                http_options, request 
    3239            ) 
    3240 
    3241            body = ( 
    3242                _BaseFirestoreRestTransport._BaseCancelOperation._get_request_body_json( 
    3243                    transcoded_request 
    3244                ) 
    3245            ) 
    3246 
    3247            # Jsonify the query params 
    3248            query_params = ( 
    3249                _BaseFirestoreRestTransport._BaseCancelOperation._get_query_params_json( 
    3250                    transcoded_request 
    3251                ) 
    3252            ) 
    3253 
    3254            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    3255                logging.DEBUG 
    3256            ):  # pragma: NO COVER 
    3257                request_url = "{host}{uri}".format( 
    3258                    host=self._host, uri=transcoded_request["uri"] 
    3259                ) 
    3260                method = transcoded_request["method"] 
    3261                try: 
    3262                    request_payload = json_format.MessageToJson(request) 
    3263                except: 
    3264                    request_payload = None 
    3265                http_request = { 
    3266                    "payload": request_payload, 
    3267                    "requestMethod": method, 
    3268                    "requestUrl": request_url, 
    3269                    "headers": dict(metadata), 
    3270                } 
    3271                _LOGGER.debug( 
    3272                    f"Sending request for google.firestore_v1.FirestoreClient.CancelOperation", 
    3273                    extra={ 
    3274                        "serviceName": "google.firestore.v1.Firestore", 
    3275                        "rpcName": "CancelOperation", 
    3276                        "httpRequest": http_request, 
    3277                        "metadata": http_request["headers"], 
    3278                    }, 
    3279                ) 
    3280 
    3281            # Send the request 
    3282            response = FirestoreRestTransport._CancelOperation._get_response( 
    3283                self._host, 
    3284                metadata, 
    3285                query_params, 
    3286                self._session, 
    3287                timeout, 
    3288                transcoded_request, 
    3289                body, 
    3290            ) 
    3291 
    3292            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    3293            # subclass. 
    3294            if response.status_code >= 400: 
    3295                raise core_exceptions.from_http_response(response) 
    3296 
    3297            return self._interceptor.post_cancel_operation(None) 
    3298 
    3299    @property 
    3300    def delete_operation(self): 
    3301        return self._DeleteOperation(self._session, self._host, self._interceptor)  # type: ignore 
    3302 
    3303    class _DeleteOperation( 
    3304        _BaseFirestoreRestTransport._BaseDeleteOperation, FirestoreRestStub 
    3305    ): 
    3306        def __hash__(self): 
    3307            return hash("FirestoreRestTransport.DeleteOperation") 
    3308 
    3309        @staticmethod 
    3310        def _get_response( 
    3311            host, 
    3312            metadata, 
    3313            query_params, 
    3314            session, 
    3315            timeout, 
    3316            transcoded_request, 
    3317            body=None, 
    3318        ): 
    3319            uri = transcoded_request["uri"] 
    3320            method = transcoded_request["method"] 
    3321            headers = dict(metadata) 
    3322            headers["Content-Type"] = "application/json" 
    3323            response = getattr(session, method)( 
    3324                "{host}{uri}".format(host=host, uri=uri), 
    3325                timeout=timeout, 
    3326                headers=headers, 
    3327                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    3328            ) 
    3329            return response 
    3330 
    3331        def __call__( 
    3332            self, 
    3333            request: operations_pb2.DeleteOperationRequest, 
    3334            *, 
    3335            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    3336            timeout: Optional[float] = None, 
    3337            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    3338        ) -> None: 
    3339            r"""Call the delete operation method over HTTP. 
    3340 
    3341            Args: 
    3342                request (operations_pb2.DeleteOperationRequest): 
    3343                    The request object for DeleteOperation method. 
    3344                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    3345                    should be retried. 
    3346                timeout (float): The timeout for this request. 
    3347                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    3348                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    3349                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    3350                    be of type `bytes`. 
    3351            """ 
    3352 
    3353            http_options = ( 
    3354                _BaseFirestoreRestTransport._BaseDeleteOperation._get_http_options() 
    3355            ) 
    3356 
    3357            request, metadata = self._interceptor.pre_delete_operation( 
    3358                request, metadata 
    3359            ) 
    3360            transcoded_request = _BaseFirestoreRestTransport._BaseDeleteOperation._get_transcoded_request( 
    3361                http_options, request 
    3362            ) 
    3363 
    3364            # Jsonify the query params 
    3365            query_params = ( 
    3366                _BaseFirestoreRestTransport._BaseDeleteOperation._get_query_params_json( 
    3367                    transcoded_request 
    3368                ) 
    3369            ) 
    3370 
    3371            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    3372                logging.DEBUG 
    3373            ):  # pragma: NO COVER 
    3374                request_url = "{host}{uri}".format( 
    3375                    host=self._host, uri=transcoded_request["uri"] 
    3376                ) 
    3377                method = transcoded_request["method"] 
    3378                try: 
    3379                    request_payload = json_format.MessageToJson(request) 
    3380                except: 
    3381                    request_payload = None 
    3382                http_request = { 
    3383                    "payload": request_payload, 
    3384                    "requestMethod": method, 
    3385                    "requestUrl": request_url, 
    3386                    "headers": dict(metadata), 
    3387                } 
    3388                _LOGGER.debug( 
    3389                    f"Sending request for google.firestore_v1.FirestoreClient.DeleteOperation", 
    3390                    extra={ 
    3391                        "serviceName": "google.firestore.v1.Firestore", 
    3392                        "rpcName": "DeleteOperation", 
    3393                        "httpRequest": http_request, 
    3394                        "metadata": http_request["headers"], 
    3395                    }, 
    3396                ) 
    3397 
    3398            # Send the request 
    3399            response = FirestoreRestTransport._DeleteOperation._get_response( 
    3400                self._host, 
    3401                metadata, 
    3402                query_params, 
    3403                self._session, 
    3404                timeout, 
    3405                transcoded_request, 
    3406            ) 
    3407 
    3408            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    3409            # subclass. 
    3410            if response.status_code >= 400: 
    3411                raise core_exceptions.from_http_response(response) 
    3412 
    3413            return self._interceptor.post_delete_operation(None) 
    3414 
    3415    @property 
    3416    def get_operation(self): 
    3417        return self._GetOperation(self._session, self._host, self._interceptor)  # type: ignore 
    3418 
    3419    class _GetOperation( 
    3420        _BaseFirestoreRestTransport._BaseGetOperation, FirestoreRestStub 
    3421    ): 
    3422        def __hash__(self): 
    3423            return hash("FirestoreRestTransport.GetOperation") 
    3424 
    3425        @staticmethod 
    3426        def _get_response( 
    3427            host, 
    3428            metadata, 
    3429            query_params, 
    3430            session, 
    3431            timeout, 
    3432            transcoded_request, 
    3433            body=None, 
    3434        ): 
    3435            uri = transcoded_request["uri"] 
    3436            method = transcoded_request["method"] 
    3437            headers = dict(metadata) 
    3438            headers["Content-Type"] = "application/json" 
    3439            response = getattr(session, method)( 
    3440                "{host}{uri}".format(host=host, uri=uri), 
    3441                timeout=timeout, 
    3442                headers=headers, 
    3443                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    3444            ) 
    3445            return response 
    3446 
    3447        def __call__( 
    3448            self, 
    3449            request: operations_pb2.GetOperationRequest, 
    3450            *, 
    3451            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    3452            timeout: Optional[float] = None, 
    3453            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    3454        ) -> operations_pb2.Operation: 
    3455            r"""Call the get operation method over HTTP. 
    3456 
    3457            Args: 
    3458                request (operations_pb2.GetOperationRequest): 
    3459                    The request object for GetOperation method. 
    3460                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    3461                    should be retried. 
    3462                timeout (float): The timeout for this request. 
    3463                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    3464                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    3465                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    3466                    be of type `bytes`. 
    3467 
    3468            Returns: 
    3469                operations_pb2.Operation: Response from GetOperation method. 
    3470            """ 
    3471 
    3472            http_options = ( 
    3473                _BaseFirestoreRestTransport._BaseGetOperation._get_http_options() 
    3474            ) 
    3475 
    3476            request, metadata = self._interceptor.pre_get_operation(request, metadata) 
    3477            transcoded_request = ( 
    3478                _BaseFirestoreRestTransport._BaseGetOperation._get_transcoded_request( 
    3479                    http_options, request 
    3480                ) 
    3481            ) 
    3482 
    3483            # Jsonify the query params 
    3484            query_params = ( 
    3485                _BaseFirestoreRestTransport._BaseGetOperation._get_query_params_json( 
    3486                    transcoded_request 
    3487                ) 
    3488            ) 
    3489 
    3490            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    3491                logging.DEBUG 
    3492            ):  # pragma: NO COVER 
    3493                request_url = "{host}{uri}".format( 
    3494                    host=self._host, uri=transcoded_request["uri"] 
    3495                ) 
    3496                method = transcoded_request["method"] 
    3497                try: 
    3498                    request_payload = json_format.MessageToJson(request) 
    3499                except: 
    3500                    request_payload = None 
    3501                http_request = { 
    3502                    "payload": request_payload, 
    3503                    "requestMethod": method, 
    3504                    "requestUrl": request_url, 
    3505                    "headers": dict(metadata), 
    3506                } 
    3507                _LOGGER.debug( 
    3508                    f"Sending request for google.firestore_v1.FirestoreClient.GetOperation", 
    3509                    extra={ 
    3510                        "serviceName": "google.firestore.v1.Firestore", 
    3511                        "rpcName": "GetOperation", 
    3512                        "httpRequest": http_request, 
    3513                        "metadata": http_request["headers"], 
    3514                    }, 
    3515                ) 
    3516 
    3517            # Send the request 
    3518            response = FirestoreRestTransport._GetOperation._get_response( 
    3519                self._host, 
    3520                metadata, 
    3521                query_params, 
    3522                self._session, 
    3523                timeout, 
    3524                transcoded_request, 
    3525            ) 
    3526 
    3527            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    3528            # subclass. 
    3529            if response.status_code >= 400: 
    3530                raise core_exceptions.from_http_response(response) 
    3531 
    3532            content = response.content.decode("utf-8") 
    3533            resp = operations_pb2.Operation() 
    3534            resp = json_format.Parse(content, resp) 
    3535            resp = self._interceptor.post_get_operation(resp) 
    3536            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    3537                logging.DEBUG 
    3538            ):  # pragma: NO COVER 
    3539                try: 
    3540                    response_payload = json_format.MessageToJson(resp) 
    3541                except: 
    3542                    response_payload = None 
    3543                http_response = { 
    3544                    "payload": response_payload, 
    3545                    "headers": dict(response.headers), 
    3546                    "status": response.status_code, 
    3547                } 
    3548                _LOGGER.debug( 
    3549                    "Received response for google.firestore_v1.FirestoreAsyncClient.GetOperation", 
    3550                    extra={ 
    3551                        "serviceName": "google.firestore.v1.Firestore", 
    3552                        "rpcName": "GetOperation", 
    3553                        "httpResponse": http_response, 
    3554                        "metadata": http_response["headers"], 
    3555                    }, 
    3556                ) 
    3557            return resp 
    3558 
    3559    @property 
    3560    def list_operations(self): 
    3561        return self._ListOperations(self._session, self._host, self._interceptor)  # type: ignore 
    3562 
    3563    class _ListOperations( 
    3564        _BaseFirestoreRestTransport._BaseListOperations, FirestoreRestStub 
    3565    ): 
    3566        def __hash__(self): 
    3567            return hash("FirestoreRestTransport.ListOperations") 
    3568 
    3569        @staticmethod 
    3570        def _get_response( 
    3571            host, 
    3572            metadata, 
    3573            query_params, 
    3574            session, 
    3575            timeout, 
    3576            transcoded_request, 
    3577            body=None, 
    3578        ): 
    3579            uri = transcoded_request["uri"] 
    3580            method = transcoded_request["method"] 
    3581            headers = dict(metadata) 
    3582            headers["Content-Type"] = "application/json" 
    3583            response = getattr(session, method)( 
    3584                "{host}{uri}".format(host=host, uri=uri), 
    3585                timeout=timeout, 
    3586                headers=headers, 
    3587                params=rest_helpers.flatten_query_params(query_params, strict=True), 
    3588            ) 
    3589            return response 
    3590 
    3591        def __call__( 
    3592            self, 
    3593            request: operations_pb2.ListOperationsRequest, 
    3594            *, 
    3595            retry: OptionalRetry = gapic_v1.method.DEFAULT, 
    3596            timeout: Optional[float] = None, 
    3597            metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), 
    3598        ) -> operations_pb2.ListOperationsResponse: 
    3599            r"""Call the list operations method over HTTP. 
    3600 
    3601            Args: 
    3602                request (operations_pb2.ListOperationsRequest): 
    3603                    The request object for ListOperations method. 
    3604                retry (google.api_core.retry.Retry): Designation of what errors, if any, 
    3605                    should be retried. 
    3606                timeout (float): The timeout for this request. 
    3607                metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be 
    3608                    sent along with the request as metadata. Normally, each value must be of type `str`, 
    3609                    but for metadata keys ending with the suffix `-bin`, the corresponding values must 
    3610                    be of type `bytes`. 
    3611 
    3612            Returns: 
    3613                operations_pb2.ListOperationsResponse: Response from ListOperations method. 
    3614            """ 
    3615 
    3616            http_options = ( 
    3617                _BaseFirestoreRestTransport._BaseListOperations._get_http_options() 
    3618            ) 
    3619 
    3620            request, metadata = self._interceptor.pre_list_operations(request, metadata) 
    3621            transcoded_request = ( 
    3622                _BaseFirestoreRestTransport._BaseListOperations._get_transcoded_request( 
    3623                    http_options, request 
    3624                ) 
    3625            ) 
    3626 
    3627            # Jsonify the query params 
    3628            query_params = ( 
    3629                _BaseFirestoreRestTransport._BaseListOperations._get_query_params_json( 
    3630                    transcoded_request 
    3631                ) 
    3632            ) 
    3633 
    3634            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    3635                logging.DEBUG 
    3636            ):  # pragma: NO COVER 
    3637                request_url = "{host}{uri}".format( 
    3638                    host=self._host, uri=transcoded_request["uri"] 
    3639                ) 
    3640                method = transcoded_request["method"] 
    3641                try: 
    3642                    request_payload = json_format.MessageToJson(request) 
    3643                except: 
    3644                    request_payload = None 
    3645                http_request = { 
    3646                    "payload": request_payload, 
    3647                    "requestMethod": method, 
    3648                    "requestUrl": request_url, 
    3649                    "headers": dict(metadata), 
    3650                } 
    3651                _LOGGER.debug( 
    3652                    f"Sending request for google.firestore_v1.FirestoreClient.ListOperations", 
    3653                    extra={ 
    3654                        "serviceName": "google.firestore.v1.Firestore", 
    3655                        "rpcName": "ListOperations", 
    3656                        "httpRequest": http_request, 
    3657                        "metadata": http_request["headers"], 
    3658                    }, 
    3659                ) 
    3660 
    3661            # Send the request 
    3662            response = FirestoreRestTransport._ListOperations._get_response( 
    3663                self._host, 
    3664                metadata, 
    3665                query_params, 
    3666                self._session, 
    3667                timeout, 
    3668                transcoded_request, 
    3669            ) 
    3670 
    3671            # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 
    3672            # subclass. 
    3673            if response.status_code >= 400: 
    3674                raise core_exceptions.from_http_response(response) 
    3675 
    3676            content = response.content.decode("utf-8") 
    3677            resp = operations_pb2.ListOperationsResponse() 
    3678            resp = json_format.Parse(content, resp) 
    3679            resp = self._interceptor.post_list_operations(resp) 
    3680            if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( 
    3681                logging.DEBUG 
    3682            ):  # pragma: NO COVER 
    3683                try: 
    3684                    response_payload = json_format.MessageToJson(resp) 
    3685                except: 
    3686                    response_payload = None 
    3687                http_response = { 
    3688                    "payload": response_payload, 
    3689                    "headers": dict(response.headers), 
    3690                    "status": response.status_code, 
    3691                } 
    3692                _LOGGER.debug( 
    3693                    "Received response for google.firestore_v1.FirestoreAsyncClient.ListOperations", 
    3694                    extra={ 
    3695                        "serviceName": "google.firestore.v1.Firestore", 
    3696                        "rpcName": "ListOperations", 
    3697                        "httpResponse": http_response, 
    3698                        "metadata": http_response["headers"], 
    3699                    }, 
    3700                ) 
    3701            return resp 
    3702 
    3703    @property 
    3704    def kind(self) -> str: 
    3705        return "rest" 
    3706 
    3707    def close(self): 
    3708        self._session.close() 
    3709 
    3710 
    3711__all__ = ("FirestoreRestTransport",)