
    .
0hj.                        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 ddlmZ ddlmZmZ dd	lmZmZ dd
lmZ ddlmZ erddlmZ ddlm Z  ddl!m"Z"  G d deej#                           Z$dS )zHClasses for representing collections for the Google Cloud Firestore API.    )annotations)TYPE_CHECKINGAnyCallable	GeneratorOptionalTupleUnion)gapic_v1)retry)aggregationdocument)query)transactionvector_query)BaseCollectionReference_item_to_document_ref)QueryResultsList)Watch)DocumentSnapshot)ExplainOptions)StreamGeneratorc                       e Zd ZdZd, fdZd-dZd.dZd/d
Zdej	        j
        dfd0dZdej	        j
        dfd1dZd2dZdej	        j
        dfddd3d#Zdej	        j
        dfddd4d'Zd5d+Z xZS )6CollectionReferencea  A reference to a collection in a Firestore database.

    The collection may already exist or this class can facilitate creation
    of documents within the collection.

    Args:
        path (Tuple[str, ...]): The components in the collection path.
            This is a series of strings representing each collection and
            sub-collection ID, as well as the document IDs for any documents
            that contain a sub-collection.
        kwargs (dict): The keyword arguments for the constructor. The only
            supported keyword is ``client`` and it must be a
            :class:`~google.cloud.firestore_v1.client.Client` if provided. It
            represents the client that created this collection reference.

    Raises:
        ValueError: if

            * the ``path`` is empty
            * there are an even number of elements
            * a collection ID in ``path`` is not a string
            * a document ID in ``path`` is not a string
        TypeError: If a keyword other than ``client`` is used.
    returnNonec                H     t          t          |           j        |i | d S N)superr   __init__)selfpathkwargs	__class__s      _/var/www/html/nourish/venv/lib/python3.11/site-packages/google/cloud/firestore_v1/collection.pyr    zCollectionReference.__init__A   s,    1!4((14B6BBBBB    query_mod.Queryc                *    t          j        |           S )zeQuery factory.

        Returns:
            :class:`~google.cloud.firestore_v1.query.Query`
        )	query_modQueryr!   s    r%   _queryzCollectionReference._queryD   s     t$$$r&   aggregation.AggregationQueryc                N    t          j        |                                           S )zAggregationQuery factory.

        Returns:
            :class:`~google.cloud.firestore_v1.aggregation_query.AggregationQuery`
        )r   AggregationQueryr,   r+   s    r%   _aggregation_queryz&CollectionReference._aggregation_queryL   s     +DKKMM:::r&   vector_query.VectorQueryc                N    t          j        |                                           S )zxVectorQuery factory.

        Returns:
            :class:`~google.cloud.firestore_v1.vector_query.VectorQuery`
        )r   VectorQueryr,   r+   s    r%   _vector_queryz!CollectionReference._vector_queryT   s     '666r&   Ndocument_datadictdocument_idUnion[str, None]r   retries.Retry | object | NonetimeoutUnion[float, None]Tuple[Any, Any]c                f    |                      ||||          \  }} |j        |fi |}|j        |fS )a  Create a document in the Firestore database with the provided data.

        Args:
            document_data (dict): Property names and values to use for
                creating the document.
            document_id (Optional[str]): The document identifier within the
                current collection. If not provided, an ID will be
                automatically assigned by the server (the assigned ID will be
                a random 20 character string composed of digits,
                uppercase and lowercase letters).
            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:
            Tuple[:class:`google.protobuf.timestamp_pb2.Timestamp`,                 :class:`~google.cloud.firestore_v1.document.DocumentReference`]:
                Pair of

                * The ``update_time`` when the document was created/overwritten.
                * A document reference for the created document.

        Raises:
            :class:`google.cloud.exceptions.Conflict`:
                If ``document_id`` is provided and the document already exists.
        )	_prep_addcreateupdate_time)r!   r5   r7   r   r:   document_refr#   write_results           r%   addzCollectionReference.add\   sS    D  $~~	 
  
f +|*=CCFCC'55r&   	page_sizeUnion[int, None]Generator[Any, Any, None]c                                           |||          \  }}  j        j        j        d| j        j        d|} fd|D             S )a`  List all subdocuments of the current collection.

        Args:
            page_size (Optional[int]]): The maximum number of documents
                in each page of results from this request. Non-positive values
                are ignored. Defaults to a sensible value set by the API.
            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.DocumentReference`]:
                iterator of subdocuments of the current collection. If the
                collection does not exist at the time of `snapshot`, the
                iterator will be empty
        )requestmetadatac              3  8   K   | ]}t          |          V  d S r   )r   ).0ir!   s     r%   	<genexpr>z5CollectionReference.list_documents.<locals>.<genexpr>   s.      AA1%dA..AAAAAAr&    )_prep_list_documents_client_firestore_apilist_documents_rpc_metadata)r!   rD   r   r:   rH   r#   iterators   `      r%   rR   z"CollectionReference.list_documents   su    . 33IugNN=4<.= 
\/
 
 
 

 BAAAAAAAr&   
chunk_sizeintc                P    |                                                      |          S r   )r,   	_chunkify)r!   rU   s     r%   rX   zCollectionReference._chunkify   s    {{}}&&z222r&   )explain_optionsr   $Union[transaction.Transaction, None]rY   Optional[ExplainOptions]"QueryResultsList[DocumentSnapshot]c               `    |                      ||          \  }}|||d<    |j        dd|i|S )a  Read the documents in this collection.

        This sends a ``RunQuery`` RPC and returns a list of documents
        returned in the stream of ``RunQueryResponse`` messages.

        Args:
            transaction
                (Optional[:class:`~google.cloud.firestore_v1.transaction.transaction.Transaction`]):
                An existing transaction that this query will run 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.
            explain_options
                (Optional[:class:`~google.cloud.firestore_v1.query_profile.ExplainOptions`]):
                Options to enable query profiling for this query. When set,
                explain_metrics will be available on the returned generator.

        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).

        Returns:
            QueryResultsList[DocumentSnapshot]: The documents in this collection
            that match the query.
        NrY   r   rN   )_prep_get_or_streamgetr!   r   r   r:   rY   r   r#   s          r%   r_   zCollectionReference.get   sL    D 00@@v&(7F$%uy;;[;F;;;r&   !Optional[transaction.Transaction]Optional[float]!StreamGenerator[DocumentSnapshot]c               `    |                      ||          \  }}|r||d<    |j        dd|i|S )a   Read the documents in this collection.

        This sends a ``RunQuery`` RPC and then returns an iterator which
        consumes each document returned in the stream of ``RunQueryResponse``
        messages.

        .. note::

           The underlying stream of responses will time out after
           the ``max_rpc_timeout_millis`` value set in the GAPIC
           client configuration for the ``RunQuery`` API.  Snapshots
           not consumed from the iterator before that point will be lost.

        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:
            transaction (Optional[:class:`~google.cloud.firestore_v1.transaction.                transaction.Transaction`]):
                An existing transaction that the query will run in.
            retry (Optional[google.api_core.retry.Retry]): Designation of what
                errors, if any, should be retried.  Defaults to a
                system-specified policy.
            timeout (Optional[float]): The timeout for this request. Defaults
                to a system-specified value.
            explain_options
                (Optional[:class:`~google.cloud.firestore_v1.query_profile.ExplainOptions`]):
                Options to enable query profiling for this query. When set,
                explain_metrics will be available on the returned generator.

        Returns:
            `StreamGenerator[DocumentSnapshot]`: A generator of the query results.
        rY   r   rN   )r^   streamr`   s          r%   re   zCollectionReference.stream   sN    T 00@@v 	8(7F$%u|>>>v>>>r&   callbackr   r   c                j    |                                  }t          j        ||t          j                  S )a  Monitor the documents in this collection.

        This starts a watch on this collection using a background thread. The
        provided callback is run on the snapshot of the documents.

        Args:
            callback (Callable[[:class:`~google.cloud.firestore.collection.CollectionSnapshot`], NoneType]):
                a callback to run when a change occurs.

        Example:
            from google.cloud import firestore_v1

            db = firestore_v1.Client()
            collection_ref = db.collection(u'users')

            def on_snapshot(collection_snapshot, changes, read_time):
                for doc in collection_snapshot.documents:
                    print(u'{} => {}'.format(doc.id, doc.to_dict()))

            # Watch this collection
            collection_watch = collection_ref.on_snapshot(on_snapshot)

            # Terminate this watch
            collection_watch.unsubscribe()
        )r,   r   	for_queryr   r   )r!   rf   r   s      r%   on_snapshotzCollectionReference.on_snapshot  s(    4 uh0IJJJr&   )r   r   )r   r'   )r   r-   )r   r1   )
r5   r6   r7   r8   r   r9   r:   r;   r   r<   )rD   rE   r   r9   r:   r;   r   rF   )rU   rV   )
r   rZ   r   r9   r:   r;   rY   r[   r   r\   )
r   ra   r   r9   r:   rb   rY   r[   r   rc   )rf   r   r   r   )__name__
__module____qualname____doc__r    r,   r0   r4   r   methodDEFAULTrC   rR   rX   r_   re   ri   __classcell__)r$   s   @r%   r   r   '   s        2C C C C C C% % % %; ; ; ;7 7 7 7 )-/7/F&*)6 )6 )6 )6 )6Z '+/7/F&*	B B B B B@3 3 3 3
 =A/7/F&*	&< 59&< &< &< &< &< &<T :>/7/F#'	.? 59.? .? .? .? .? .?`K K K K K K K Kr&   r   N)%rm   
__future__r   typingr   r   r   r   r   r	   r
   google.api_corer   r   retriesgoogle.cloud.firestore_v1r   r   r   r)   r   r   )google.cloud.firestore_v1.base_collectionr   r   'google.cloud.firestore_v1.query_resultsr   google.cloud.firestore_v1.watchr   'google.cloud.firestore_v1.base_documentr   'google.cloud.firestore_v1.query_profiler   *google.cloud.firestore_v1.stream_generatorr   r*   r   rN   r&   r%   <module>r|      s   O N " " " " " " R R R R R R R R R R R R R R R R R R $ $ $ $ $ $ , , , , , , ; ; ; ; ; ; ; ; 8 8 8 8 8 8 ? ? ? ? ? ? ? ?        E D D D D D 1 1 1 1 1 1 KHHHHHHFFFFFFJJJJJJvK vK vK vK vK1)/B vK vK vK vK vKr&   