Ë
    ö%9jYe  ã                  ó´  — d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl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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
j6                  e
j8                  e
j:                  e
j<                  e
j>                  e
j@                  e
jB                  e
jD                  fZ#e
j8                  fZ$ ejJ                  d-d.d/g«      Z& G d0„ d1e'«      Z( G d2„ d3e«      Z) G d4„ d5e'«      Z* G d6„ d7e'«      Z+d8„ Z,d9„ Z-d:„ Z.d;„ Z/ G d<„ d=e'«      Z0y)>é    )ÚannotationsN)ÚEnum)Ú
exceptions)ÚBackgroundConsumerÚResumableBidiRpc)Ú_helpers)ÚListenRequestÚTargetÚTargetChangeiyP  Ú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    ú[/var/www/html/truck-me/venv/lib/python3.12/site-packages/google/cloud/firestore_v1/watch.pyÚ__init__zWatchDocTree.__init__O   s   € ØˆŒ
Øˆ�ó    c                óH   — t        | j                  j                  «       «      S ©N)Úlistr5   Úkeysr7   s    r9   r?   zWatchDocTree.keysS   s   € Ü�D—J‘J—O‘OÓ%Ó&Ð&r;   c                ó~   — t        «       }| j                  j                  «       |_        | j                  |_        |} | S r=   )r3   r5   Úcopyr6   )r8   Úwdts     r9   Ú_copyzWatchDocTree._copyV   s0   € Ü‹nˆØ—J‘J—O‘OÓ%ˆŒ	Ø—[‘[ˆŒ
ØˆØˆr;   c                ó–   — | j                  «       } t        || j                  «      | j                  |<   | xj                  dz  c_        | S )Nr   )rC   r/   r6   r5   )r8   Úkeyr0   s      r9   ÚinsertzWatchDocTree.insert]   s8   € Ø�z‰z‹|ˆÜ& u¨d¯k©kÓ:ˆ�
‰
�3‰Ø�Š�qÑ�Øˆr;   c                ó    — | j                   |   S r=   ©r5   ©r8   rE   s     r9   ÚfindzWatchDocTree.findc   s   € Ø�z‰z˜#‰Ðr;   c                ó@   — | j                  «       } | j                  |= | S r=   )rC   r5   rI   s     r9   ÚremovezWatchDocTree.removef   s   € Ø�z‰z‹|ˆØ�J‰J�sˆOØˆr;   c              #  ó6   K  — | j                   D ]  }|–— Œ y ­wr=   rH   ©r8   Úks     r9   Ú__iter__zWatchDocTree.__iter__k   s   è ø€ Ø—‘ò 	ˆAØ‹Gñ	ùs   ‚c                ó,   — t        | j                  «      S r=   )Úlenr5   r7   s    r9   Ú__len__zWatchDocTree.__len__o   s   € Ü�4—:‘:‹Ðr;   c                ó   — || j                   v S r=   rH   rN   s     r9   Ú__contains__zWatchDocTree.__contains__r   s   € Ø�D—J‘JˆÐr;   N)Ú__name__Ú
__module__Ú__qualname__r:   r?   rC   rF   rJ   rL   rP   rS   rU   © r;   r9   r3   r3   K   s/   „ òò'òòòòò
òór;   r3   c                  ó   — e Zd ZdZdZdZy)Ú
ChangeTyper   r   r   N)rV   rW   rX   ÚADDEDÚREMOVEDÚMODIFIEDrY   r;   r9   r[   r[   v   s   „ Ø€EØ€GØ�Hr;   r[   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)r8   rb   rc   rd   re   s        r9   r:   zDocumentChange.__init__}   s    € ð ˆŒ	Ø ˆŒØ"ˆŒØ"ˆ�r;   N©rV   rW   rX   r:   rY   r;   r9   r`   r`   |   s   „ ó#r;   r`   c                  ó   — e Zd Zd„ Zy)ÚWatchResultc                ó.   — || _         || _        || _        y r=   )ÚsnapshotÚnameÚchange_type)r8   rj   rk   rl   s       r9   r:   zWatchResult.__init__Ž   s   € Ø ˆŒØˆŒ	Ø&ˆÕr;   Nrf   rY   r;   r9   rh   rh   �   s   „ ó'r;   rh   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    r9   Ú_maybe_wrap_exceptionrs   ”   s'   € ä�)œTŸ]™]Ô+Ü×)Ñ)¨)Ó4Ð4ØÐr;   c                ó   — | |k(  sJ d«       ‚y)Nz+Document watches only support one document.r   rY   )Údoc1Údoc2s     r9   Údocument_watch_comparatorrw   ›   s   € Ø�4Š<ÐFÐFÓFˆ<Ør;   c                ó8   — t        | «      }t        |t        «      S r=   )rs   rn   Ú_RECOVERABLE_STREAM_EXCEPTIONS©rr   Úwrappeds     r9   Ú_should_recoverr|       ó   € Ü# IÓ.€GÜ�gÔ=Ó>Ð>r;   c                ó8   — t        | «      }t        |t        «      S r=   )rs   rn   Ú_TERMINATING_STREAM_EXCEPTIONSrz   s     r9   Ú_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_tokenr3   Údoc_treeÚdoc_mapÚ
change_mapÚcurrentÚ
has_pushedÚ_init_stream)r8   Údocument_referenceÚ	firestoreÚtargetÚ
comparatorÚsnapshot_callbackÚdocument_snapshot_clss          r9   r:   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)r8   Úrpc_requests     r9   r˜   zWatch._init_streamé   sŒ   € Ø×+Ñ+ˆä-=Ø—i‘i×*Ñ*×1Ñ1Ü*Ü.Ø'Ø—_‘_×2Ñ2ô.
ˆŒ	ð 	�	‰	×#Ñ# D×$5Ñ$5Ô6ô 5GØ�I‰I�t×'Ñ'ó5
ˆŒð 	�‰×ÑÕ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_IDrw   )ÚclsÚdocument_refr�   rž   s       r9   Ú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          r9   Ú	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‘   r7   s    r9   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_pfxrR   Ú_documents_pfx_len)r8   Údatabase_strings     r9   r�   zWatch._set_documents_pfx5  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_activer7   s    r9   rÏ   zWatch.is_active9  s"   € ð �~‰~ TÐ)ÒF¨d¯n©n×.FÑ.FÐFr;   Nc                ó‚  — | j                   5  | j                  r
	 ddd«       y| j                  rL| j                  r/t        j                  d«       | j                  j                  «        d| j                  _        d| _        d| _        | j                  r<| j                  j                  «        d| j                  _        g | 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­   rÏ   Ú_LOGGERÚdebugÚstopÚ_on_responser‰   r©   ÚcloseÚ_initial_requestÚ
_callbacksrn   Ú	ExceptionÚRuntimeError)r8   Úreasons     r9   rÕ   zWatch.closeB  sú   € ð �]‰]ñ 	8Ø�|Š|Ø÷	8ð 	8ð
 �~Š~Ø—>’>Ü—M‘MÐ"6Ô7Ø—N‘N×'Ñ'Ô)Ø.2�—‘Ô+Ø!ˆDŒNà&*ˆDÔ#Ø�yŠyØ—	‘	—‘Ô!Ø-1�—	‘	Ô*Ø')�—	‘	Ô$ØˆDŒIØˆDŒLÜ�M‰MÐ6Ô7÷'	8ñ* ä�M‰MÐ2°VÑ;Ô<Ü˜&¤)Ô,Ø�Ü˜vÓ&Ð&ð ÷+	8ð 	8ús   �D5¤CD5Ä5D>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Ú   )rk   r›   ÚkwargsTN)	rÑ   Úinfors   rŒ   ÚThreadÚ_RPC_ERROR_THREAD_NAMErÕ   Údaemonr®   )r8   ÚfutureÚthreads      r9   r«   zWatch._on_rpc_doneg  sM   € ô 	�‰ÐEÔFÜ& vÓ.ˆÜ×!Ñ!Ü'°·
±
ÀHÈfÐCUô
ˆð ˆŒØ�‰�r;   c                ó$   — | j                  «        y r=   )rÕ   r7   s    r9   ÚunsubscribezWatch.unsubscribez  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_idsrR   Ú	read_timer–   Úpushr’   )r8   Útarget_changeÚno_target_idss      r9   Ú$_on_snapshot_target_change_no_changez*Watch._on_snapshot_target_change_no_change}  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Ù   )r8   ré   r²   s      r9   Ú_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)r8   ré   rð   rñ   Úerror_messages        r9   Ú!_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©r8   ré   s     r9   Ú _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     r9   Ú"_on_snapshot_target_change_currentz(Watch._on_snapshot_target_change_current¥  s   € Ü�‰Ð;Ô<Øˆ�r;   c                óZ   — |j                  | j                  «      r|| j                  d  }|S r=   )Ú
startswithrË   rÌ   )r8   Údocument_names     r9   Ú_strip_document_pfxzWatch._strip_document_pfx±  s/   € Ø×#Ñ# D×$7Ñ$7Ô8Ø)¨$×*AÑ*AÐ*CÐDˆMØÐr;   c                ó  — | j                   j                  «       ry|€| j                  «        y|j                  }|j	                  d«      }|dk(  r™|j
                  j                  }t        j                  d|› �«       | j                  j                  |«      }|€9d|› �}t        j                  d|› �«       | j                  t        |«      ¬«       y	  || |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/                  |
j0                  «      }| j,                  j%                  |«      }| j3                  ||dd|
j4                  |
j6                  ¬«      }|| j8                  |
j0                  <   y|	r=t        j                  d«       t:        j<                  | j8                  |
j0                  <   yy|dk(  rIt        j                  d«       |j>                  j$                  }t:        j<                  | j8                  |<   y|dk(  rIt        j                  d«       |j@                  j$                  }t:        j<                  | j8                  |<   y|dk(  r¸t        j                  d«       |jB                  jD                  | jG                  «       k7  r{t        j                  d«       tI        jJ                  tL        | j                  ¬«      }|jO                  «        |jQ                  «        | jS                  «        | jU                  «        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.)rk   r›   zUNKNOWN TYPE. UHOHzUnknown listen response type: )+rŽ   ÚlockedrÕ   rÁ   Ú
WhichOneofré   Útarget_change_typerÑ   rÒ   Ú_target_changetype_dispatchÚgetrÝ   Ú
ValueErrorrØ   rµ   r  ræ   Úremoved_target_idsrc   r   Údecode_dictÚfieldsr…   rþ   rk   rˆ   r  r  r•   r[   r]   r  r  r	  ÚcountÚ_current_sizerŒ   rÞ   rß   r®   Újoinrö   r˜   )r8   ÚprotoÚpbÚwhichr  Úmethrñ   Úexc2ÚchangedÚremovedrc   r  rý   r·   rj   rk   râ   s                    r9   r¬   zWatch.on_snapshot¶  sK  € ð �=‰=×ÑÔ!àØˆ=Ø�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ðá˜˜u×2Ñ2Õ3ð Ð'Ó'Ü�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øô[ !ò Ü—M‘MÐ$5°d°VÐ"<Ô=Øûðús   ÃO Ï	PÏ'P Ð P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.
        ©rE   TN)Ú_extract_changesr”   r•   Ú_compute_snapshotr“   r—   rR   Ú	functoolsÚ
cmp_to_keyr‡   Úsortedr?   r‰   Úclearr’   )r8   rç   Únext_resume_tokenÚdeletesÚaddsÚupdatesÚupdated_treeÚupdated_mapÚappliedChangesrE   r?   s              r9   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=   )Úitemsr[   r]   Úappendrç   )r”   Úchangesrç   r&  r'  r(  rk   r0   s           r9   r  zWatch._extract_changesD  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  rJ   r1   rL   r`   r[   r]   )rk   r)  r*  Úold_documentÚexistingrd   s         r9   Ú
delete_docz+Watch._compute_snapshot.<locals>.delete_docd  s{   € ð
 ˜;Ñ&Ð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´   rF   rJ   r1   r`   r[   r\   )Únew_documentr)  r*  rk   re   s        r9   Úadd_docz(Watch._compute_snapshot.<locals>.add_docv  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`   r[   r^   rd   re   )	r6  r)  r*  rk   r2  Úremove_changeÚ
add_changer7  r4  s	          €€r9   Ú
modify_docz+Watch._compute_snapshot.<locals>.modify_doc†  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.)rR   r!  r"  r‡   r#  r.  rÑ   rÒ   )r8   r“   r”   Údelete_changesÚadd_changesÚupdate_changesr)  r*  r;  r+  rE   rk   Úchangerj   r7  r4  s                 @@r9   r   zWatch._compute_snapshotY  s€  ù€ ð  ˆØˆä�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ó	
Ð4ð ˜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•   rR   )r8   r&  r'  rÃ   s       r9   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´   r[   r]   r–   )r8   rj   rk   s      r9   rö   zWatch._reset_docsÒ  su   € ô 	�‰Ð+Ô,Ø�‰×ÑÔØ ˆÔð Ÿ™×*Ñ*Ó,ò 	7ˆHØ×%Ñ%×4Ñ4ˆDÜ$.×$6Ñ$6ˆD�O‰O˜DÒ!ð	7ð ˆ�r;   r=   )#rV   rW   rX   r:   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ö   rY   r;   r9   r‚   r‚   ª   sü   „ ò<ò|ð& ñ
ó ð
ð< ñ
ó ð
ò
ò;ð ñGó ðGó#'òJò&òKòUò
ò ò
ð
 	×"Ñ"Ð$HØ×ÑÐ<Ø×ÑÐ!BØ×ÑÐ @Ø× Ñ Ð"Dð#Ðòò
o3òb.ð: ñ(ó ð(ò(o;òb<ór;   r‚   )1Ú
__future__r   Úcollectionsr!  ÚloggingrŒ   Úenumr   ro   Úgoogle.api_corer   Úgoogle.api_core.bidir   r   Úgoogle.cloud.firestore_v1r   Ú)google.cloud.firestore_v1.types.firestorer	   r
   r   rD  Ú	getLoggerrV   rÑ   rµ   ÚGRPC_STATUS_CODErß   ÚAbortedÚ	CancelledÚUnknownÚDeadlineExceededÚResourceExhaustedÚInternalServerErrorÚServiceUnavailableÚUnauthenticatedry   r   Ú
namedtupler/   Úobjectr3   r[   r`   rh   rs   rw   r|   r€   r‚   rY   r;   r9   ú<module>r_     s  ðõ #ã Û Û Û Ý ã Ý &ß Eå .÷ñ ð  ×0Ñ0Ð à
ˆ'×
Ñ
˜HÓ
%€à€ðØˆ!ðà�ðð ˆqðð ˜ð	ð
 ˜ðð �ðð �aðð ˜ðð �rðð ˜!ðð ˜1ðð ˆrðð �Bðð �Rðð �ðð  �2ð!ð" �ð#ð$ �"ñ%Ð ð( 2Ð à×ÑØ×ÑØ×ÑØ×ÑØ× Ñ Ø×"Ñ"Ø×!Ñ!Ø×Ñð	"Ð ð #-×"6Ñ"6Ð!8Ð à%ˆ{×%Ñ% n°wÀÐ6HÓI€ô(�6ô (ôV�ô ô#�Vô #ô"'�&ô 'òòò
?ò
?ô
vˆFõ vr;   