
    .
0hN8                       d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZmZm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 ddlmZ ddl m!Z" ddl#m$Z% ddl&m'Z' erddl(m)Z)  G d de          Z*dS )a  Client for interacting with the Google Cloud Firestore API.

This is the base from which all interactions with the API occur.

In the hierarchy of API concepts

* a :class:`~google.cloud.firestore_v1.client.Client` owns a
  :class:`~google.cloud.firestore_v1.collection.CollectionReference`
* a :class:`~google.cloud.firestore_v1.client.Client` owns a
  :class:`~google.cloud.firestore_v1.document.DocumentReference`
    )annotations)TYPE_CHECKINGAny	GeneratorIterableListOptionalUnion)gapic_v1)retry)_CLIENT_INFO
BaseClient_parse_batch_get_path_helper)DocumentSnapshot
WriteBatch)CollectionReference)DocumentReference)	FieldPath)CollectionGroup)client)grpcTransaction)
BulkWriterc                       e Zd ZdZdddedfd1 fdZed             Zd2d
Zd3dZ	d4dZ
ddej        j        dfd5dZej        j        dfd6dZddd d7d'Zdd(d)d8d,Zd9d.Zd:d0Z xZS );Clienta  Client for interacting with Google Cloud Firestore API.

    .. note::

        Since the Cloud Firestore API requires the gRPC transport, no
        ``_http`` argument is accepted by this class.

    Args:
        project (Optional[str]): The project which the client acts on behalf
            of. If not passed, falls back to the default inferred
            from the environment.
        credentials (Optional[~google.auth.credentials.Credentials]): The
            OAuth2 Credentials to use for this client. If not passed, falls
            back to the default inferred from the environment.
        database (Optional[str]): The database name that the client targets.
            If not passed, falls back to :attr:`DEFAULT_DATABASE`.
        client_info (Optional[google.api_core.gapic_v1.client_info.ClientInfo]):
            The client info used to send a user-agent string along with API
            requests. If ``None``, then default info will be used. Generally,
            you only need to set this if you're developing your own library
            or partner tool.
        client_options (Union[dict, google.api_core.client_options.ClientOptions]):
            Client options used to set user options on the client. API Endpoint
            should be set through client_options.
    NreturnNonec                b    t          t          |                               |||||           d S )N)projectcredentialsdatabaseclient_infoclient_options)superr   __init__)selfr"   r#   r$   r%   r&   	__class__s         [/var/www/html/nourish/venv/lib/python3.11/site-packages/google/cloud/firestore_v1/client.pyr(   zClient.__init__T   sE     	fd$$##) 	% 	
 	
 	
 	
 	
    c                b    |                      t          j        t          j        t                    S )zLazy-loading getter GAPIC Firestore API.
        Returns:
            :class:`~google.cloud.gapic.firestore.v1`.firestore_client.FirestoreClient:
            The GAPIC client with the credentials of the current client.
        )_firestore_api_helperfirestore_grpc_transportFirestoreGrpcTransportfirestore_clientFirestoreClientr)   s    r+   _firestore_apizClient._firestore_apid   s+     ))$;,
 
 	
r,   collection_pathstrr   c                4    t          t          |          d| iS )a  Get a reference to a collection.

        For a top-level collection:

        .. code-block:: python

            >>> client.collection('top')

        For a sub-collection:

        .. code-block:: python

            >>> client.collection('mydocs/doc/subcol')
            >>> # is the same as
            >>> client.collection('mydocs', 'doc', 'subcol')

        Sub-collections can be nested deeper in a similar fashion.

        Args:
            collection_path: Can either be

                * A single ``/``-delimited path to a collection
                * A tuple of collection path segments

        Returns:
            :class:`~google.cloud.firestore_v1.collection.CollectionReference`:
            A reference to a collection in the Firestore database.
        r   )r   r   )r)   r5   s     r+   
collectionzClient.collectionq   s    : #L$A$AO$OOOr,   collection_idr   c                F    t          |                     |                    S )a  
        Creates and returns a new Query that includes all documents in the
        database that are contained in a collection or subcollection with the
        given collection_id.

        .. code-block:: python

            >>> query = client.collection_group('mygroup')

        Args:
            collection_id (str) Identifies the collections to query over.

                Every collection or subcollection with this ID as the last segment of its
                path will be included. Cannot contain a slash.

        Returns:
            :class:`~google.cloud.firestore_v1.query.CollectionGroup`:
            The created Query.
        )r   _get_collection_reference)r)   r9   s     r+   collection_groupzClient.collection_group   s     ( t==mLLMMMr,   document_pathr   c                *    t           | j        | d| iS )a}  Get a reference to a document in a collection.

        For a top-level document:

        .. code-block:: python

            >>> client.document('collek/shun')
            >>> # is the same as
            >>> client.document('collek', 'shun')

        For a document in a sub-collection:

        .. code-block:: python

            >>> client.document('mydocs/doc/subcol/child')
            >>> # is the same as
            >>> client.document('mydocs', 'doc', 'subcol', 'child')

        Documents in sub-collections can be nested deeper in a similar fashion.

        Args:
            document_path): Can either be

                * A single ``/``-delimited path to a document
                * A tuple of document path segments

        Returns:
            :class:`~google.cloud.firestore_v1.document.DocumentReference`:
            A reference to a document in a collection.
        r   )r   _document_path_helper)r)   r=   s     r+   documentzClient.document   s+    > !'T'7
@D
 
 	
r,   
referenceslistfield_pathsIterable[str] | NonetransactionTransaction | Noner   retries.Retry | object | Nonetimeoutfloat | None&Generator[DocumentSnapshot, Any, None]c              #     K   |                      |||||          \  }}} | j        j        d|| j        d|}	|	D ]}
t	          |
||           V  dS )a  Retrieve a batch of documents.

        .. note::

           Documents returned by this method are not guaranteed to be
           returned in the same order that they are given in ``references``.

        .. note::

           If multiple ``references`` refer to the same document, the server
           will only return one result.

        See :meth:`~google.cloud.firestore_v1.client.Client.field_path` for
        more information on **field paths**.

        If a ``transaction`` is used and it already has write operations
        added, this method cannot be used (i.e. read-after-write is not
        allowed).

        Args:
            references (List[.DocumentReference, ...]): Iterable of document
                references to be retrieved.
            field_paths (Optional[Iterable[str, ...]]): An iterable of field
                paths (``.``-delimited list of field names) to use as a
                projection of document fields in the returned results. If
                no value is provided, all fields will be returned.
            transaction (Optional[:class:`~google.cloud.firestore_v1.transaction.Transaction`]):
                An existing transaction that these ``references`` will be
                retrieved in.
            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.

        Yields:
            .DocumentSnapshot: The next document snapshot that fulfills the
            query, or :data:`None` if the document does not exist.
        requestmetadataN )_prep_get_allr4   batch_get_documents_rpc_metadatar   )r)   rA   rC   rE   r   rH   rM   reference_mapkwargsresponse_iteratorget_doc_responses              r+   get_allzClient.get_all   s      \ *.););[%*
 *
& DD/C 
'
 
 
 
 !2 	J 	J"#3]DIIIIII	J 	Jr,   Generator[Any, Any, None]c              #     K   |                      ||          \  }} | j        j        d|| j        d|}|D ]}|                     |          V  dS )a  List top-level collections of the client's database.

        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:
            Sequence[:class:`~google.cloud.firestore_v1.collection.CollectionReference`]:
                iterator of subcollections of the current document.
        rL   NrO   )_prep_collectionsr4   list_collection_idsrR   r8   )r)   r   rH   rM   rT   iteratorr9   s          r+   collectionszClient.collections  s      " 00@@:4&: 
'
 
 
 
 & 	1 	1M//-000000	1 	1r,   i  )bulk_writer
chunk_size	reference-Union[CollectionReference, DocumentReference]r^   Optional['BulkWriter']r_   intc               ^    ||                                  }|                     |||          S )aU  Deletes documents and their subcollections, regardless of collection
        name.

        Passing a CollectionReference leads to each document in the collection
        getting deleted, as well as all of their descendents.

        Passing a DocumentReference deletes that one document and all of its
        descendents.

        Args:
            reference (Union[
                :class:`@google.cloud.firestore_v1.collection.CollectionReference`,
                :class:`@google.cloud.firestore_v1.document.DocumentReference`,
            ])
                The reference to be deleted.

            bulk_writer (Optional[:class:`@google.cloud.firestore_v1.bulk_writer.BulkWriter`])
                The BulkWriter used to delete all matching documents. Supply this
                if you want to override the default throttling behavior.

        N)r_   )r^   _recursive_delete)r)   r`   r^   r_   s       r+   recursive_deletezClient.recursive_delete   sA    8 **,,K%%! & 
 
 	
r,   r   r_   depth'BulkWriter'rh   c          	     T   d}t          |t                    rt|                                                    t	          j                    g                              |          D ]&}|D ]!}|dz  }|                    |j                   "'nt          |t                    rQ|
                                D ]!}||                     ||||dz             z  }"|dz  }|                    |           nt          d|j        j                   |dk    r|                                 |S )z'Recursion helper for `recursive_delete.r      rg   zUnexpected type for reference: )
isinstancer   	recursiveselectr   document_id	_chunkifydeleter`   r   r]   re   	TypeErrorr*   __name__close)	r)   r`   r^   r_   rh   num_deletedchunkdoc_snapcol_refs	            r+   re   zClient._recursive_deleteE  sl    i!455 	 ##%%.00122:&&; ; !& ; ;H1$K&&x'9::::;; 	#455 	$0022  t55)!)	  6      1Ky)))) P)2E2NPP   A::r,   r   c                     t          |           S )zGet a batch instance from this client.

        Returns:
            :class:`~google.cloud.firestore_v1.batch.WriteBatch`:
            A "write" batch to be used for accumulating document changes and
            sending the changes all at once.
        r   r3   s    r+   batchzClient.batchs  s     $r,   r   c                    t          | fi |S )aD  Get a transaction that uses this client.

        See :class:`~google.cloud.firestore_v1.transaction.Transaction` for
        more information on transactions and the constructor arguments.

        Args:
            kwargs (Dict[str, Any]): The keyword arguments (other than
                ``client``) to pass along to the
                :class:`~google.cloud.firestore_v1.transaction.Transaction`
                constructor.

        Returns:
            :class:`~google.cloud.firestore_v1.transaction.Transaction`:
            A transaction attached to this client.
        r   )r)   rT   s     r+   rE   zClient.transaction}  s      4**6***r,   )r   r    )r5   r6   r   r   )r9   r6   r   r   )r=   r6   r   r   )rA   rB   rC   rD   rE   rF   r   rG   rH   rI   r   rJ   )r   rG   rH   rI   r   rX   )r`   ra   r^   rb   r_   rc   r   rc   )
r`   ra   r^   ri   r_   rc   rh   rc   r   rc   )r   r   )r   r   )rs   
__module____qualname____doc__r   r(   propertyr4   r8   r<   r@   r   methodDEFAULTrW   r]   rf   re   rz   rE   __classcell__)r*   s   @r+   r   r   9   s        8  
 
 
 
 
 
 
  

 

 X

P P P P>N N N N,!
 !
 !
 !
L -1*./7/F $9J 9J 9J 9J 9Jz 08/F $1 1 1 1 1@ /3#
 #
 #
 #
 #
 #
T , , , , , ,\       + + + + + + + +r,   r   N)+r~   
__future__r   typingr   r   r   r   r   r	   r
   google.api_corer   r   retries%google.cloud.firestore_v1.base_clientr   r   r   r   'google.cloud.firestore_v1.base_documentr   google.cloud.firestore_v1.batchr   $google.cloud.firestore_v1.collectionr   "google.cloud.firestore_v1.documentr   $google.cloud.firestore_v1.field_pathr   google.cloud.firestore_v1.queryr   ,google.cloud.firestore_v1.services.firestorer   r1   7google.cloud.firestore_v1.services.firestore.transportsr   r/   %google.cloud.firestore_v1.transactionr   %google.cloud.firestore_v1.bulk_writerr   r   rO   r,   r+   <module>r      s  
 
 # " " " " " Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q $ $ $ $ $ $ , , , , , ,            E D D D D D 6 6 6 6 6 6 D D D D D D @ @ @ @ @ @ : : : : : : ; ; ; ; ; ; S S S S S S      > = = = = = A@@@@@@T+ T+ T+ T+ T+Z T+ T+ T+ T+ T+r,   