o
    }l~i4                     @  s   d Z ddlmZ ddl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mZ er\ddl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ej! Z"dS )zHClasses for representing collections for the Google Cloud Firestore API.    )annotations)TYPE_CHECKINGAnyAsyncGeneratorOptionalTuplecast)gapic_v1)retry_async)async_aggregationasync_queryasync_vector_querytransaction)BaseCollectionReference_item_to_document_refN)AsyncDocumentReference)AsyncStreamGenerator)DocumentSnapshot)ExplainOptions)QueryResultsListc                      s   e Zd ZdZd7 fddZd8ddZd9d
dZd:ddZd;ddZde	j
jdfd<ddZd=d> fd d!Zde	j
jdfdd"d?d(d)Zde	j
jdfddd*d@d2d3Zde	j
jdfddd*dAd5d6Z  ZS )BAsyncCollectionReferencea  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                   s   t t| j|i | d S N)superr   __init__)selfpathkwargs	__class__ q/var/www/newdalilibackend/backend/venv/lib/python3.10/site-packages/google/cloud/firestore_v1/async_collection.pyr   E   s   z!AsyncCollectionReference.__init__async_query.AsyncQueryc                 C  s
   t | S )zeQuery factory.

        Returns:
            :class:`~google.cloud.firestore_v1.query.Query`
        )r   
AsyncQueryr   r!   r!   r"   _queryH   s   
zAsyncCollectionReference._query'async_aggregation.AsyncAggregationQueryc                 C     t |  S )zAsyncAggregationQuery factory.

        Returns:
            :class:`~google.cloud.firestore_v1.async_aggregation.AsyncAggregationQuery
        )r   AsyncAggregationQueryr&   r%   r!   r!   r"   _aggregation_queryP      z+AsyncCollectionReference._aggregation_query#async_vector_query.AsyncVectorQueryc                 C  r(   )zAsyncVectorQuery factory.

        Returns:
            :class:`~google.cloud.firestore_v1.async_vector_query.AsyncVectorQuery`
        )r   AsyncVectorQueryr&   r%   r!   r!   r"   _vector_queryX   r+   z&AsyncCollectionReference._vector_query
chunk_sizeintc                 C s*   |   |2 z	3 d H W }|V  q6 d S r   )r&   	_chunkify)r   r/   pager!   r!   r"   r1   `   s   z"AsyncCollectionReference._chunkifyNdocument_datadictdocument_id
str | Noneretry"retries.AsyncRetry | object | Nonetimeoutfloat | NoneTuple[Any, Any]c                   s8   |  ||||\}}|j|fi |I dH }|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.async_document.AsyncDocumentReference`]:
                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.
        N)	_prep_addcreateupdate_time)r   r3   r5   r7   r9   document_refr   write_resultr!   r!   r"   addd   s   "
zAsyncCollectionReference.addr   c                   s   t t| |}td|S )a  Create a sub-document underneath the current collection.

        Args:
            document_id (Optional[str]): The document identifier
                within the current collection. If not provided, will default
                to a random 20 character string composed of digits,
                uppercase and lowercase and letters.

        Returns:
            :class:`~google.cloud.firestore_v1.document.async_document.AsyncDocumentReference`:
            The child document.
        r   )r   r   documentr   )r   r5   docr   r!   r"   rB      s   
z!AsyncCollectionReference.document)	read_time	page_size
int | NonerD   datetime.datetime | None,AsyncGenerator[AsyncDocumentReference, None]c          	      C s^   |  ||||\}}| jjjd|| jjd|I dH }|2 z3 dH W }t| |V  q6 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.
            read_time (Optional[datetime.datetime]): If set, reads documents as they were at the given
                time. This must be a timestamp within the past one hour, or if Point-in-Time Recovery
                is enabled, can additionally be a whole minute timestamp within the past 7 days. If no
                timezone is specified in the :class:`datetime.datetime` object, it is assumed to be UTC.

        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metadataNr!   )_prep_list_documents_client_firestore_apilist_documents_rpc_metadatar   )	r   rE   r7   r9   rD   rI   r   iteratorir!   r!   r"   rN      s   
z'AsyncCollectionReference.list_documents)explain_optionsrD   r   !Optional[transaction.Transaction]Optional[float]rR   Optional[ExplainOptions]Optional[datetime.datetime]"QueryResultsList[DocumentSnapshot]c                  sL   |  ||\}}|dur||d< |dur||d< |jdd|i|I dH 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`]):
                An existing transaction that this 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 (Otional[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.
            read_time (Optional[datetime.datetime]): If set, reads documents as they were at the given
                time. This must be a timestamp within the past one hour, or if Point-in-Time Recovery
                is enabled, can additionally be a whole minute timestamp within the past 7 days. If no
                timezone is specified in the :class:`datetime.datetime` object, it is assumed to be UTC.

        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.
        NrR   rD   r   r!   )_prep_get_or_streamgetr   r   r7   r9   rR   rD   queryr   r!   r!   r"   rY      s   'zAsyncCollectionReference.get&AsyncStreamGenerator[DocumentSnapshot]c                C  s@   |  ||\}}|r||d< |dur||d< |jdd|i|S )a  Read the documents in this collection.

        This sends a ``RunQuery`` RPC and then returns a generator 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`]):
                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.
            read_time (Optional[datetime.datetime]): If set, reads documents as they were at the given
                time. This must be a timestamp within the past one hour, or if Point-in-Time Recovery
                is enabled, can additionally be a whole minute timestamp within the past 7 days. If no
                timezone is specified in the :class:`datetime.datetime` object, it is assumed to be UTC.

        Returns:
            `AsyncStreamGenerator[DocumentSnapshot]`: A generator of the query
            results.
        rR   NrD   r   r!   )rX   streamrZ   r!   r!   r"   r]      s   0zAsyncCollectionReference.stream)r   r   )r   r#   )r   r'   )r   r,   )r/   r0   )
r3   r4   r5   r6   r7   r8   r9   r:   r   r;   r   )r5   r6   r   r   )
rE   rF   r7   r8   r9   r:   rD   rG   r   rH   )r   rS   r7   r8   r9   rT   rR   rU   rD   rV   r   rW   )r   rS   r7   r8   r9   rT   rR   rU   rD   rV   r   r\   )__name__
__module____qualname____doc__r   r&   r*   r.   r1   r	   methodDEFAULTrA   rB   rN   rY   r]   __classcell__r!   r!   r   r"   r   +   s@    



++1r   )#ra   
__future__r   typingr   r   r   r   r   r   google.api_corer	   r
   retriesgoogle.cloud.firestore_v1r   r   r   r   )google.cloud.firestore_v1.base_collectionr   r   datetime(google.cloud.firestore_v1.async_documentr   0google.cloud.firestore_v1.async_stream_generatorr   'google.cloud.firestore_v1.base_documentr   'google.cloud.firestore_v1.query_profiler   'google.cloud.firestore_v1.query_resultsr   r$   r   r!   r!   r!   r"   <module>   s    