o
    ˷e                     @   sT   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 G dd deZd	S )
z=Helpers for batch requests to the Google Cloud Firestore API.    )gapic_v1)retry)_helpers)	BaseBatch)BatchWriteResponsec                       sX   e Zd ZdZd fddZejjdfdej	de
defdd	Zdej	de
fd
dZ  ZS )BulkWriteBatcha  Accumulate write operations to be sent in a batch. Use this over
    `WriteBatch` for higher volumes (e.g., via `BulkWriter`) and when the order
    of operations within a given batch is unimportant.

    Because the order in which individual write operations are applied to the database
    is not guaranteed, `batch_write` RPCs can never contain multiple operations
    to the same document. If calling code detects a second write operation to a
    known document reference, it should first cut off the previous batch and
    send it, then create a new batch starting with the latest write operation.
    In practice, the [Async]BulkWriter classes handle this.

    This has the same set of methods for write operations that
    :class:`~google.cloud.firestore_v1.document.DocumentReference` does,
    e.g. :meth:`~google.cloud.firestore_v1.document.DocumentReference.create`.

    Args:
        client (:class:`~google.cloud.firestore_v1.client.Client`):
            The client that created this batch.
    returnNc                    s   t t| j|d d S )N)client)superr   __init__)selfr	   	__class__ [/var/www/ideatree/venv/lib/python3.10/site-packages/google/cloud/firestore_v1/bulk_batch.pyr   -   s   zBulkWriteBatch.__init__r   timeoutc                 C   sH   |  ||\}}| jj}|jd|| jjd|}g | _t|j| _|S )a  Writes the changes accumulated in this batch.

        Write operations are not guaranteed to be applied in order and must not
        contain multiple writes to any given document. Preferred over `commit`
        for performance reasons if these conditions are acceptable.

        Args:
            retry (google.api_core.retry.Retry): Designation of what errors, if any,
                should be retried.  Defaults to a system-specified policy.
            timeout (float): The timeout for this request.  Defaults to a
                system-specified value.

        Returns:
            :class:`google.cloud.proto.firestore.v1.write.BatchWriteResponse`:
            Container holding the write results corresponding to the changes
            committed, returned in the same order as the changes were applied to
            this batch. An individual write result contains an ``update_time``
            field.
        )requestmetadataNr   )_prep_commit_client_firestore_apibatch_write_rpc_metadata
_write_pbslistwrite_results)r   r   r   r   kwargs_apisave_responser   r   r   commit0   s   zBulkWriteBatch.commitc                 C   s&   | j j| jd d}t||}||fS )N)databasewriteslabels)r   _database_stringr   r   make_retry_timeout_kwargs)r   r   r   r   r   r   r   r   r   T   s   zBulkWriteBatch._prep_commit)r   N)__name__
__module____qualname____doc__r   r   methodDEFAULTretriesRetryfloatr   r   r   __classcell__r   r   r   r   r      s    
$r   N)r(   google.api_corer   r   r+   google.cloud.firestore_v1r   $google.cloud.firestore_v1.base_batchr   )google.cloud.firestore_v1.types.firestorer   r   r   r   r   r   <module>   s   