Ë
    V¼Sf©c  ã                   óÀ  — d dl Z d dlmZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlZd dlmZ d dlmZ d dlmZ d d	lmZ ej$                  Z ej&                  e«      Zd
Zi dd “dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d'“d(d)“d*d+“d,d-i¥Zd.Ze
j2                  e
j4                  e
j6                  e
j8                  e
j:                  e
j<                  e
j>                  e
j@                  fZ!e
j4                  fZ" e jF                  d/d0d1g«      Z$ G d2„ d3e%«      Z& G d4„ d5e«      Z' G d6„ d7e%«      Z( G d8„ d9e%«      Z)d:„ Z*d;„ Z+d<„ Z,d=„ Z- G d>„ d?e%«      Z.y)@é    N)ÚEnum)ÚResumableBidiRpc)ÚBackgroundConsumer)Ú
exceptions)ÚListenRequest)ÚTarget)ÚTargetChange)Ú_helpersiyP  ÚOKÚ	CANCELLEDé   ÚUNKNOWNé   ÚINVALID_ARGUMENTé   ÚDEADLINE_EXCEEDEDé   Ú	NOT_FOUNDé   ÚALREADY_EXISTSé   ÚPERMISSION_DENIEDé   ÚUNAUTHENTICATEDé   ÚRESOURCE_EXHAUSTEDé   ÚFAILED_PRECONDITIONé	   ÚABORTEDé
   ÚOUT_OF_RANGEé   ÚUNIMPLEMENTEDé   ÚINTERNALé   ÚUNAVAILABLEé   Ú	DATA_LOSSé   Ú
DO_NOT_USEéÿÿÿÿzThread-OnRpcTerminatedÚDocTreeEntryÚvalueÚindexc                   óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚWatchDocTreec                 ó    — i | _         d| _        y )Nr   )Ú_dictÚ_index©Úselfs    ú^C:\Users\user\Documents\project_loop\venv\Lib\site-packages\google/cloud/firestore_v1/watch.pyÚ__init__zWatchDocTree.__init__N   s   € ØˆŒ
Øˆ�ó    c                 óH   — t        | j                  j                  «       «      S ©N)Úlistr4   Úkeysr6   s    r8   r>   zWatchDocTree.keysR   s   € Ü�D—J‘J—O‘OÓ%Ó&Ð&r:   c                 ó~   — t        «       }| j                  j                  «       |_        | j                  |_        |} | S r<   )r2   r4   Úcopyr5   )r7   Úwdts     r8   Ú_copyzWatchDocTree._copyU   s0   € Ü‹nˆØ—J‘J—O‘OÓ%ˆŒ	Ø—[‘[ˆŒ
ØˆØˆr:   c                 ó–   — | j                  «       } t        || j                  «      | j                  |<   | xj                  dz  c_        | S )Nr   )rB   r.   r5   r4   )r7   Úkeyr/   s      r8   ÚinsertzWatchDocTree.insert\   s8   € Ø�z‰z‹|ˆÜ& u¨d¯k©kÓ:ˆ�
‰
�3‰Ø�Š�qÑ�Øˆr:   c                 ó    — | j                   |   S r<   ©r4   ©r7   rD   s     r8   ÚfindzWatchDocTree.findb   s   € Ø�z‰z˜#‰Ðr:   c                 ó@   — | j                  «       } | j                  |= | S r<   )rB   r4   rH   s     r8   ÚremovezWatchDocTree.removee   s   € Ø�z‰z‹|ˆØ�J‰J�sˆOØˆr:   c              #   ó6   K  — | j                   D ]  }|–— Œ y ­wr<   rG   ©r7   Úks     r8   Ú__iter__zWatchDocTree.__iter__j   s   è ø€ Ø—‘ò 	ˆAØ‹Gñ	ùs   ‚c                 ó,   — t        | j                  «      S r<   )Úlenr4   r6   s    r8   Ú__len__zWatchDocTree.__len__n   s   € Ü�4—:‘:‹Ðr:   c                 ó   — || j                   v S r<   rG   rM   s     r8   Ú__contains__zWatchDocTree.__contains__q   s   € Ø�D—J‘JˆÐr:   N)Ú__name__Ú
__module__Ú__qualname__r9   r>   rB   rE   rI   rK   rO   rR   rT   © r:   r8   r2   r2   J   s/   „ òò'òòòòò
òór:   r2   c                   ó   — e Zd ZdZdZdZy)Ú
ChangeTyper   r   r   N)rU   rV   rW   ÚADDEDÚREMOVEDÚMODIFIEDrX   r:   r8   rZ   rZ   u   s   „ Ø€EØ€GØ�Hr:   rZ   c                   ó   — e Zd Zd„ Zy)ÚDocumentChangec                 ó<   — || _         || _        || _        || _        y)z±DocumentChange

        Args:
            type (ChangeType):
            document (document.DocumentSnapshot):
            old_index (int):
            new_index (int):
        N)ÚtypeÚdocumentÚ	old_indexÚ	new_index)r7   ra   rb   rc   rd   s        r8   r9   zDocumentChange.__init__|   s    € ð ˆŒ	Ø ˆŒØ"ˆŒØ"ˆ�r:   N©rU   rV   rW   r9   rX   r:   r8   r_   r_   {   s   „ ó#r:   r_   c                   ó   — e Zd Zd„ Zy)ÚWatchResultc                 ó.   — || _         || _        || _        y r<   )ÚsnapshotÚnameÚchange_type)r7   ri   rj   rk   s       r8   r9   zWatchResult.__init__�   s   € Ø ˆŒØˆŒ	Ø&ˆÕr:   Nre   rX   r:   r8   rg   rg   Œ   s   „ ó'r:   rg   c                 ód   — t        | t        j                  «      rt        j                  | «      S | S )z(Wraps a gRPC exception class, if needed.)Ú
isinstanceÚgrpcÚRpcErrorr   Úfrom_grpc_error)Ú	exceptions    r8   Ú_maybe_wrap_exceptionrr   “   s'   € ä�)œTŸ]™]Ô+Ü×)Ñ)¨)Ó4Ð4ØÐr:   c                 ó   — | |k(  sJ d«       ‚y)Nz+Document watches only support one document.r   rX   )Údoc1Údoc2s     r8   Údocument_watch_comparatorrv   š   s   € Ø�4Š<ÐFÐFÔFØr:   c                 ó8   — t        | «      }t        |t        «      S r<   )rr   rm   Ú_RECOVERABLE_STREAM_EXCEPTIONS©rq   Úwrappeds     r8   Ú_should_recoverr{   Ÿ   ó   € Ü# IÓ.€GÜ�gÔ=Ó>Ð>r:   c                 ó8   — t        | «      }t        |t        «      S r<   )rr   rm   Ú_TERMINATING_STREAM_EXCEPTIONSry   s     r8   Ú_should_terminater   ¤   r|   r:   c            
       ó6  — e Zd Zd„ Zd„ Zed„ «       Zed„ «       Zd„ Zd„ Z	e
d„ «       Zdd	„Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej*                  eej,                  eej.                  eej0                  eej2                  eiZd„ Zd„ Zd„ Zed„ «       Zd„ Z d„ Z!d„ Z"y)ÚWatchc                 ót  — || _         || _        || _        || _        || _        || _        |j                  | _        t        j                  «       | _
        d| _        | j                  |j                  «       d| _        t        «       | _        i | _        i | _        d| _        d| _        | j+                  «        y)aÕ  
        Args:
            firestore:
            target:
            comparator:
            snapshot_callback: Callback method to process snapshots.
                Args:
                    docs (List(DocumentSnapshot)): A callback that returns the
                        ordered list of documents stored in this snapshot.
                    changes (List(str)): A callback that returns the list of
                        changed documents since the last snapshot delivered for
                        this watch.
                    read_time (string): The ISO 8601 time at which this
                        snapshot was obtained.

            document_snapshot_cls: factory for instances of DocumentSnapshot
        FN)Ú_document_referenceÚ
_firestoreÚ_targetsÚ_comparatorÚ_document_snapshot_clsÚ_snapshot_callbackÚ_firestore_apiÚ_apiÚ	threadingÚLockÚ_closingÚ_closedÚ_set_documents_pfxÚ_database_stringÚresume_tokenr2   Údoc_treeÚdoc_mapÚ
change_mapÚcurrentÚ
has_pushedÚ_init_stream)r7   Údocument_referenceÚ	firestoreÚtargetÚ
comparatorÚsnapshot_callbackÚdocument_snapshot_clss          r8   r9   zWatch.__init__ª   s«   € ð4 $6ˆÔ Ø#ˆŒØˆŒØ%ˆÔØ&;ˆÔ#Ø"3ˆÔØ×,Ñ,ˆŒ	Ü!Ÿ™Ó(ˆŒØˆŒØ×Ñ 	× :Ñ :Ô;à ˆÔô
 %›ˆŒð ˆŒð ˆŒð ˆŒð
  ˆŒà×ÑÕr:   c                 ó‚  — | j                   }t        | j                  j                  j                  t
        t        || j                  j                  ¬«      | _	        | j                  j                  | j                  «       t        | j                  | j                  «      | _        | j                  j                  «        y )N)Ú	start_rpcÚshould_recoverÚshould_terminateÚinitial_requestÚmetadata)Ú_get_rpc_requestr   rŠ   Ú
_transportÚlistenr{   r   r„   Ú_rpc_metadataÚ_rpcÚadd_done_callbackÚ_on_rpc_doner   Úon_snapshotÚ	_consumerÚstart)r7   Úrpc_requests     r8   r—   zWatch._init_streamè   s†   € Ø×+Ñ+ˆä$Ø—i‘i×*Ñ*×1Ñ1Ü*Ü.Ø'Ø—_‘_×2Ñ2ô
ˆŒ	ð 	�	‰	×#Ñ# D×$5Ñ$5Ô6ô ,¨D¯I©I°t×7GÑ7GÓHˆŒØ�‰×ÑÕr:   c                 ó`   —  | ||j                   d|j                  git        dœt        ||«      S )a¹  
        Creates a watch snapshot listener for a document. snapshot_callback
        receives a DocumentChange object, but may also start to get
        targetChange and such soon

        Args:
            document_ref: Reference to Document
            snapshot_callback: callback to be called on snapshot
            document_snapshot_cls: class to make snapshots with
            reference_class_instance: class make references

        Ú	documents)r°   Ú	target_id)Ú_clientÚ_document_pathÚWATCH_TARGET_IDrv   )ÚclsÚdocument_refrœ   r�   s       r8   Úfor_documentzWatch.for_documentù   sA   € ñ& ØØ× Ñ à)¨L×,GÑ,GÐ+HÐIÜ,ñô &ØØ!ó

ð 
	
r:   c                 óê   — |j                   j                  «       \  }}t        j                  ||j	                  «       ¬«      } | ||j
                  |j                  t        dœ|j                  ||«      S )N)ÚparentÚstructured_query)Úqueryr±   )	Ú_parentÚ_parent_infor   ÚQueryTargetÚ_to_protobufr²   Ú_pbr´   r†   )rµ   r»   rœ   r�   Úparent_pathÚ_Úquery_targets          r8   Ú	for_queryzWatch.for_query  sl   € àŸ™×3Ñ3Ó5‰ˆ�QÜ×)Ñ)Ø°×1CÑ1CÓ1Eô
ˆñ ØØ�M‰MØ"×&Ñ&´_ÑEØ×ÑØØ!ó
ð 	
r:   c                 óÜ   — | j                   �| j                   | j                  d<   n| j                  j                  dd «       t        | j                  j
                  | j                  ¬«      S )Nr‘   )ÚdatabaseÚ
add_target)r‘   r…   Úpopr   r„   r�   r6   s    r8   r¤   zWatch._get_rpc_request(  sV   € Ø×ÑÐ(Ø,0×,=Ñ,=ˆD�M‰M˜.Ò)à�M‰M×Ñ˜n¨dÔ3äØ—_‘_×5Ñ5À$Ç-Á-ô
ð 	
r:   c                 óL   — |› d�| _         t        | j                   «      | _        y )Nz/documents/)Ú_documents_pfxrQ   Ú_documents_pfx_len)r7   Údatabase_strings     r8   r�   zWatch._set_documents_pfx2  s%   € Ø!0Ð 1°Ð=ˆÔÜ"% d×&9Ñ&9Ó":ˆÕr:   c                 óN   — | j                   duxr | j                   j                  S )z¸bool: True if this manager is actively streaming.

        Note that ``False`` does not indicate this is complete shut down,
        just that it stopped getting new messages.
        N)r¬   Ú	is_activer6   s    r8   rÎ   zWatch.is_active6  s"   € ð �~‰~ TÐ)ÒF¨d¯n©n×.FÑ.FÐFr:   Nc                 óÞ  — | j                   5  | j                  r
	 ddd«       y| j                  r/t        j	                  d«       | j
                  j                  «        d| _        | j                  j                  «        d| _        d| _        t        j	                  d«       ddd«       |r5t        j	                  d|z  «       t        |t        «      r|‚t        |«      ‚y# 1 sw Y   ŒAxY w)a  Stop consuming messages and shutdown all helper threads.

        This method is idempotent. Additional calls will have no effect.

        Args:
            reason (Any): The reason to close this. If None, this is considered
                an "intentional" shutdown.
        NzStopping consumer.TzFinished stopping manager.zreason for closing: %s)r�   rŽ   rÎ   Ú_LOGGERÚdebugr¬   Ústopr¨   Úcloserm   Ú	ExceptionÚRuntimeError)r7   Úreasons     r8   rÓ   zWatch.close?  sÀ   € ð �]‰]ñ 	8Ø�|Š|Ø÷	8ð 	8ð
 �~Š~Ü—‘Ð2Ô3Ø—‘×#Ñ#Ô%Ø!ˆDŒNà�I‰I�O‰OÔØˆDŒIØˆDŒLÜ�M‰MÐ6Ô7÷	8ñ ä�M‰MÐ2°VÑ;Ô<Ü˜&¤)Ô,Ø�Ü˜vÓ&Ð&ð ÷	8ð 	8ús   �C#¤A?C#Ã#C,c                 óÂ   — t         j                  d«       t        |«      }t        j                  t
        | j                  d|i¬«      }d|_        |j                  «        y)a
  Triggered whenever the underlying RPC terminates without recovery.

        This is typically triggered from one of two threads: the background
        consumer thread (when calling ``recv()`` produces a non-recoverable
        error) or the grpc management thread (when cancelling the RPC).

        This method is *non-blocking*. It will start another thread to deal
        with shutting everything down. This is to prevent blocking in the
        background consumer and preventing it from being ``joined()``.
        z.RPC termination has signaled manager shutdown.rÖ   )rj   rš   ÚkwargsTN)	rÐ   Úinforr   r‹   ÚThreadÚ_RPC_ERROR_THREAD_NAMErÓ   Údaemonr­   )r7   ÚfutureÚthreads      r8   rª   zWatch._on_rpc_done^  sM   € ô 	�‰ÐEÔFÜ& vÓ.ˆÜ×!Ñ!Ü'°·
±
ÀHÈfÐCUô
ˆð ˆŒØ�‰�r:   c                 ó$   — | j                  «        y r<   )rÓ   r6   s    r8   ÚunsubscribezWatch.unsubscribeq  s   € Ø�
‰
�r:   c                 ó  — t         j                  d«       |j                  d u xs t        |j                  «      dk(  }|rA|j                  r4| j
                  r'| j                  |j                  |j                  «       y y y y )Nz%on_snapshot: target change: NO_CHANGEr   )rÐ   rÑ   Ú
target_idsrQ   Ú	read_timer•   Úpushr‘   )r7   Útarget_changeÚno_target_idss      r8   Ú$_on_snapshot_target_change_no_changez*Watch._on_snapshot_target_change_no_changet  st   € Ü�‰Ð=Ô>ð ×$Ñ$¨Ð,ÒR´°M×4LÑ4LÓ0MÐQRÑ0Rð 	ñ ˜]×4Ò4¸¿ºð
 �I‰I�m×-Ñ-¨}×/IÑ/IÕJð :FÐ4ˆ=r:   c                 óz   — t         j                  d«       |j                  d   }|t        k7  rt	        d|z  «      ‚y )Nzon_snapshot: target change: ADDr   z&Unexpected target ID %s sent by server)rÐ   rÑ   râ   r´   rÕ   )r7   rå   r±   s      r8   Ú_on_snapshot_target_change_addz$Watch._on_snapshot_target_change_add�  s=   € Ü�‰Ð7Ô8Ø!×,Ñ,¨QÑ/ˆ	ØœÒ'ÜÐGÈ)ÑSÓTÐTð (r:   c                 ó
  — t         j                  d«       |j                  j                  r-|j                  j                  }|j                  j                  }nd}d}d|›d|›�}t        |«      t        j                  ||«      ‚)Nz"on_snapshot: target change: REMOVEr'   zinternal errorzError z:  )rÐ   rÑ   ÚcauseÚcodeÚmessagerÕ   r   Úfrom_grpc_status)r7   rå   rì   rí   Úerror_messages        r8   Ú!_on_snapshot_target_change_removez'Watch._on_snapshot_target_change_remove‡  st   € Ü�‰Ð:Ô;à×Ñ×#Ò#Ø ×&Ñ&×+Ñ+ˆDØ#×)Ñ)×1Ñ1‰GàˆDØ&ˆGøâ+/±Ð9ˆä˜=Ó)¬z×/JÑ/JØ�'ó0
ð 	
r:   c                 óN   — t         j                  d«       | j                  «        y )Nz!on_snapshot: target change: RESET)rÐ   rÑ   Ú_reset_docs©r7   rå   s     r8   Ú _on_snapshot_target_change_resetz&Watch._on_snapshot_target_change_reset—  s   € ä�‰Ð9Ô:Ø×ÑÕr:   c                 ó<   — t         j                  d«       d| _        y )Nz#on_snapshot: target change: CURRENTT)rÐ   rÑ   r•   ró   s     r8   Ú"_on_snapshot_target_change_currentz(Watch._on_snapshot_target_change_currentœ  s   € Ü�‰Ð;Ô<Øˆ�r:   c                 óZ   — |j                  | j                  «      r|| j                  d  }|S r<   )Ú
startswithrÊ   rË   )r7   Údocument_names     r8   Ú_strip_document_pfxzWatch._strip_document_pfx¨  s/   € Ø×#Ñ# D×$7Ñ$7Ô8Ø)¨$×*AÑ*AÐ*CÐDˆMØÐr:   c                 óØ  — |€| j                  «        y|j                  }|j                  d«      }|dk(  r˜|j                  j                  }t
        j                  d|› �«       | j                  j                  |«      }|€8d|› �}t
        j                  d|› �«       | j                  t        |«      ¬«       	  || |j                  «       y|d	k(  �r_t
        j                  d
«       t        |j                  j                  v }t        |j                  j                  v }	|j                  j                   }
|rºt
        j                  d«       t#        j$                  |
j&                  | j(                  «      }| j+                  |
j,                  «      }| j(                  j!                  |«      }| j/                  ||dd|
j0                  |
j2                  ¬«      }|| j4                  |
j,                  <   y|	r=t
        j                  d«       t6        j8                  | j4                  |
j,                  <   yy|dk(  rIt
        j                  d«       |j:                  j                   }t6        j8                  | j4                  |<   y|dk(  rIt
        j                  d«       |j<                  j                   }t6        j8                  | j4                  |<   y|dk(  r¸t
        j                  d«       |j>                  j@                  | jC                  «       k7  r{t
        j                  d«       tE        jF                  tH        | j                   ¬«      }|jK                  «        |jM                  «        | jO                  «        | jQ                  «        yyt
        j                  d«       d|› �}| j                  t        |«      ¬«       y# t        $ r}t
        j                  d|› �«       ‚ d}~ww xY w)aS  Process a response from the bi-directional gRPC stream.

        Collect changes and push the changes in a batch to the customer
        when we receive 'current' from the listen response.

        Args:
            proto(`google.cloud.firestore_v1.types.ListenResponse`):
                Callback method that receives a object to
        NÚresponse_typerå   zon_snapshot: target change: zUnknown target change type: zon_snapshot: )rÖ   zmeth(proto) exc: Údocument_changezon_snapshot: document changez%on_snapshot: document change: CHANGEDT)Ú	referenceÚdataÚexistsrã   Úcreate_timeÚupdate_timez%on_snapshot: document change: REMOVEDÚdocument_deletez$on_snapshot: document change: DELETEÚdocument_removez$on_snapshot: document change: REMOVEÚfilterzon_snapshot: filter updatez%Filter mismatch -- restarting stream.)rj   rš   zUNKNOWN TYPE. UHOHzUnknown listen response type: ))rÓ   rÀ   Ú
WhichOneofrå   Útarget_change_typerÐ   rÑ   Ú_target_changetype_dispatchÚgetrÙ   Ú
ValueErrorrÔ   r´   rý   râ   Úremoved_target_idsrb   r
   Údecode_dictÚfieldsr„   rú   rj   r‡   r  r  r”   rZ   r\   r  r  r  ÚcountÚ_current_sizer‹   rÚ   rÛ   r­   Újoinrò   r—   )r7   ÚprotoÚpbÚwhichr  Úmethrí   Úexc2ÚchangedÚremovedrb   rÿ   rù   r¶   ri   rj   rÞ   s                    r8   r«   zWatch.on_snapshot­  s8  € ð ˆ=Ø�J‰JŒLØà�Y‰YˆØ—‘˜oÓ.ˆà�OÒ#Ø!#×!1Ñ!1×!DÑ!DÐÜ�M‰MÐ8Ð9KÐ8LÐMÔNà×3Ñ3×7Ñ7Ð8JÓKˆDàˆ|Ø8Ð9KÐ8LÐM�Ü—‘˜}¨W¨IÐ6Ô7Ø—
‘
¤*¨WÓ"5�
Ô6ðá�T˜5×.Ñ.Õ/ð Ð'Ó'Ü�M‰MÐ8Ô9ô &¨×);Ñ);×)FÑ)FÐFˆGÜ%¨×);Ñ);×)NÑ)NÐNˆGð ×,Ñ,×5Ñ5ˆHáÜ—‘ÐEÔFä×+Ñ+¨H¯O©O¸T¿_¹_ÓM�ð
 !%× 8Ñ 8¸¿¹Ó G�Ø#Ÿ™×7Ñ7¸ÓF�à×6Ñ6Ø*ØØØ"Ø (× 4Ñ 4Ø (× 4Ñ 4ð 7ó �ð 2:�—‘ §¡Ò.áÜ—‘ÐEÔFÜ1;×1CÑ1C�—‘ §¡Ò.ð ð Ð'Ò'Ü�M‰MÐ@ÔAØ×%Ñ%×.Ñ.ˆDÜ$.×$6Ñ$6ˆD�O‰O˜DÒ!àÐ'Ò'Ü�M‰MÐ@ÔAØ×%Ñ%×.Ñ.ˆDÜ$.×$6Ñ$6ˆD�O‰O˜DÒ!à�hÒÜ�M‰MÐ6Ô7Ø�y‰y�‰ $×"4Ñ"4Ó"6Ò6ä—‘ÐDÔEÜ"×)Ñ)Ü/ØŸ:™:ô�ð —‘”Ø—‘”à× Ñ Ô"à×!Ñ!Õ#ð 7ô �M‰MÐ.Ô/Ø6°u°gÐ>ˆGØ�J‰Jœj¨Ó1ˆJÕ2øô[ ò Ü—‘Ð 1°$°Ð8Ô9Øûðús   Â:O Ï	O)ÏO$Ï$O)c                 óè  — | j                  | j                  | j                  |«      \  }}}| j                  | j                  | j                  |||«      \  }}}| j
                  rt        |«      rTt        j                  | j                  «      }	t        |j                  «       |	¬«      }
| j                  |
||«       d| _        || _        || _        | j                  j                  «        || _        y)z Invoke the callback with a new snapshot

        Build the sntapshot from the current set of changes.

        Clear the current changes on completion.
        ©rD   TN)Ú_extract_changesr“   r”   Ú_compute_snapshotr’   r–   rQ   Ú	functoolsÚ
cmp_to_keyr†   Úsortedr>   rˆ   Úclearr‘   )r7   rã   Únext_resume_tokenÚdeletesÚaddsÚupdatesÚupdated_treeÚupdated_mapÚappliedChangesrD   r>   s              r8   rä   z
Watch.push  sÒ   € ð "&×!6Ñ!6Ø�L‰L˜$Ÿ/™/¨9ó"
Ñˆ��wð 59×4JÑ4JØ�M‰M˜4Ÿ<™<¨°$¸ó5
Ñ1ˆ�k >ð �Š¤# nÔ"5ô ×&Ñ& t×'7Ñ'7Ó8ˆCÜ˜,×+Ñ+Ó-°3Ô7ˆDà×#Ñ# D¨.¸)ÔDØ"ˆDŒOà$ˆŒØ"ˆŒØ�‰×ÑÔØ-ˆÕr:   c                 ó  — g }g }g }|j                  «       D ]h  \  }}|t        j                  k(  r|| v sŒ|j                  |«       Œ0|| v r|�||_        |j                  |«       ŒO|�||_        |j                  |«       Œj |||fS r<   )ÚitemsrZ   r\   Úappendrã   )r“   Úchangesrã   r!  r"  r#  rj   r/   s           r8   r  zWatch._extract_changes8  s“   € àˆØˆØˆà"Ÿ=™=›?ò 	#‰KˆD�%Øœ
×*Ñ*Ò*Ø˜7’?Ø—N‘N 4Õ(Ø˜‘ØÐ(Ø&/�E”OØ—‘˜uÕ%àÐ(Ø&/�E”OØ—‘˜EÕ"ð	#ð ˜˜wÐ'Ð'r:   c                 ór  ‡‡— |}|}t        |«      t        |«      k(  sJ d«       ‚d„ Šd„ Šˆˆfd„}g }	t        j                  | j                  «      }
t	        |«      }|D ]!  } ‰|||«      \  }}}|	j                  |«       Œ# t	        ||
¬«      }t        j                  d«       |D ]6  }t        j                  d«        ‰|||«      \  }}}|	j                  |«       Œ8 t	        ||
¬«      }|D ]$  } ||||«      \  }}}|€Œ|	j                  |«       Œ& t        |«      t        |«      k(  sJ d«       ‚|||	fS )	NzJThe document tree and document map should have the same number of entries.c                 óÚ   — | |v sJ d«       ‚|j                  | «      }|j                  |«      }|j                  }|j                  |«      }|| = t	        t
        j                  ||d«      ||fS )z–
            Applies a document delete to the document tree and document map.
            Returns the corresponding DocumentChange event.
            z!Document to delete does not existr-   )r	  rI   r0   rK   r_   rZ   r\   )rj   r$  r%  Úold_documentÚexistingrc   s         r8   Ú
delete_docz+Watch._compute_snapshot.<locals>.delete_docX  sx   € ð
 ˜;Ñ&ÐKÐ(KÔKØ&Ÿ?™?¨4Ó0ˆLà#×(Ñ(¨Ó6ˆHØ Ÿ™ˆIØ'×.Ñ.¨|Ó<ˆLØ˜DÐ!äœz×1Ñ1°<ÀÈBÓOØØðð r:   c                 óæ   — | j                   j                  }||vsJ d«       ‚|j                  | d«      }|j                  | «      j                  }| ||<   t        t        j                  | d|«      ||fS )z—
            Applies a document add to the document tree and the document map.
            Returns the corresponding DocumentChange event.
            zDocument to add already existsNr-   )rþ   r³   rE   rI   r0   r_   rZ   r[   )Únew_documentr$  r%  rj   rd   s        r8   Úadd_docz(Watch._compute_snapshot.<locals>.add_docj  s|   € ð
  ×)Ñ)×8Ñ8ˆDØ˜{Ñ*ÐLÐ,LÔLØ'×.Ñ.¨|¸TÓBˆLØ$×)Ñ)¨,Ó7×=Ñ=ˆIØ ,ˆK˜Ñäœz×/Ñ/°¸rÀ9ÓMØØðð r:   c                 óB  •— | j                   j                  }||v sJ d«       ‚|j                  |«      }|j                  | j                  k7  rO ‰|||«      \  }}} ‰| ||«      \  }}}t	        t
        j                  | |j                  |j                  «      ||fS d||fS )z»
            Applies a document modification to the document tree and the
            document map.
            Returns the DocumentChange event for successful modifications.
            z!Document to modify does not existN)	rþ   r³   r	  r  r_   rZ   r]   rc   rd   )	r1  r$  r%  rj   r-  Úremove_changeÚ
add_changer2  r/  s	          €€r8   Ú
modify_docz+Watch._compute_snapshot.<locals>.modify_docz  sÅ   ø€ ð  ×)Ñ)×8Ñ8ˆDØ˜;Ñ&ÐKÐ(KÔKØ&Ÿ?™?¨4Ó0ˆLØ×'Ñ'¨<×+CÑ+CÒCÙ;EØ˜,¨ó<Ñ8�˜|¨[ñ 9@Ø  ,°ó9Ñ5�
˜L¨+ô #Ü"×+Ñ+Ø$Ø%×/Ñ/Ø"×,Ñ,ó	ð !Øð	ð 	ð ˜ {Ð2Ð2r:   r  zwalk over add_changeszin add_changeszQThe update document tree and document map should have the same number of entries.)rQ   r  r  r†   r  r)  rÐ   rÑ   )r7   r’   r“   Údelete_changesÚadd_changesÚupdate_changesr$  r%  r6  r&  rD   rj   Úchangeri   r2  r/  s                 @@r8   r  zWatch._compute_snapshotM  sz  ù€ ð  ˆØˆä�8‹}¤ G£Ò,ð 	
ð#ô	
ò
	ò$	õ 	3ðB ˆä×"Ñ" 4×#3Ñ#3Ó4ˆô   Ó/ˆØ"ò 	*ˆDÙ0:Ø�l Kó1Ñ-ˆF�L +ð ×!Ñ! &Õ)ð		*ô ˜[¨cÔ2ˆÜ�‰Ð-Ô.Ø#ò 	*ˆHÜ�M‰MÐ*Ô+Ù07Ø˜,¨ó1Ñ-ˆF�L +ð ×!Ñ! &Õ)ð	*ô   °CÔ8ˆØ&ò 	.ˆHÙ0:Ø˜,¨ó1Ñ-ˆF�L +ð Ñ!Ø×%Ñ% fÕ-ð	.ô �<Ó ¤C¨Ó$4Ò4ð 	
ð6ô	
ð ˜k¨>Ð:Ð:r:   c                 ó²   — | j                  | j                  | j                  d«      \  }}}t        | j                  «      t        |«      z   t        |«      z
  S )zsReturn the current count of all documents.

        Count includes the changes from the current changeMap.
        N)r  r“   r”   rQ   )r7   r!  r"  rÂ   s       r8   r  zWatch._current_size¾  sI   € ð
  ×0Ñ0°·±¸t¿¹ÐPTÓUÑˆ��qÜ�4—<‘<Ó ¤3 t£9Ñ,¬s°7«|Ñ;Ð;r:   c                 ó"  — t         j                  d«       | j                  j                  «        d| _        | j
                  j                  «       D ]5  }|j                  j                  }t        j                  | j                  |<   Œ7 d| _        y)zG
        Helper to clear the docs on RESET or filter mismatch.
        zresetting documentsNF)rÐ   rÑ   r”   r  r‘   r’   r>   rþ   r³   rZ   r\   r•   )r7   ri   rj   s      r8   rò   zWatch._reset_docsÆ  su   € ô 	�‰Ð+Ô,Ø�‰×ÑÔØ ˆÔð Ÿ™×*Ñ*Ó,ò 	7ˆHØ×%Ñ%×4Ñ4ˆDÜ$.×$6Ñ$6ˆD�O‰O˜DÒ!ð	7ð ˆ�r:   r<   )#rU   rV   rW   r9   r—   Úclassmethodr·   rÄ   r¤   r�   ÚpropertyrÎ   rÓ   rª   rà   rç   ré   rð   rô   rö   ÚTargetChangeTypeÚ	NO_CHANGEÚADDÚREMOVEÚRESETÚCURRENTr  rú   r«   rä   Ústaticmethodr  r  r  rò   rX   r:   r8   r�   r�   ©   sû   „ ò<ò|ð" ñ
ó ð
ð< ñ
ó ð
ò
ò;ð ñGó ðGó'ò>ò&òKòUò
ò ò
ð
 	×"Ñ"Ð$HØ×ÑÐ<Ø×ÑÐ!BØ×ÑÐ @Ø× Ñ Ð"Dð#Ðòò
l3ò\.ð: ñ(ó ð(ò(o;òb<ór:   r�   )/ÚcollectionsÚenumr   r  Úloggingr‹   Úgoogle.api_core.bidir   r   Úgoogle.api_corer   rn   Ú)google.cloud.firestore_v1.types.firestorer   r   r	   Úgoogle.cloud.firestore_v1r
   r?  Ú	getLoggerrU   rÐ   r´   ÚGRPC_STATUS_CODErÛ   ÚAbortedÚ	CancelledÚUnknownÚDeadlineExceededÚResourceExhaustedÚInternalServerErrorÚServiceUnavailableÚUnauthenticatedrx   r~   Ú
namedtupler.   Úobjectr2   rZ   r_   rg   rr   rv   r{   r   r�   rX   r:   r8   ú<module>rY     s  ðó Ý Û Û Û å 1Ý 3Ý &Û å CÝ <Ý BÝ .ð  ×0Ñ0Ð à
ˆ'×
Ñ
˜HÓ
%€à€ðØˆ!ðà�ðð ˆqðð ˜ð	ð
 ˜ðð �ðð �aðð ˜ðð �rðð ˜!ðð ˜1ðð ˆrðð �Bðð �Rðð �ðð  �2ð!ð" �ð#ð$ �"ñ%Ð ð( 2Ð à×ÑØ×ÑØ×ÑØ×ÑØ× Ñ Ø×"Ñ"Ø×!Ñ!Ø×Ñð	"Ð ð #-×"6Ñ"6Ð!8Ð à%ˆ{×%Ñ% n°wÀÐ6HÓI€ô(�6ô (ôV�ô ô#�Vô #ô"'�&ô 'òòò
?ò
?ô
kˆFõ kr:   