Ë
    ö%9jæ  ã                   óÒ   — d Z ddlZddlZddlZddlmZ ddlZ ej                  d«      Z G d„ dej                  j                  «      Z
 G d„ d«      Z G d	„ d
«      Z G d„ d«      Zy)zzSSEClient module to stream realtime updates from the Firebase Database.

Based on a similar implementation from Pyrebase.
é    N)Ú	transportz\r\n\r\n|\r\r|\n\nc                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚKeepAuthSessionzIA session that does not drop authentication on redirects between domains.c                 ó,   •— t         t        | �  |«       y ©N)Úsuperr   Ú__init__)ÚselfÚ
credentialÚ	__class__s     €úU/var/www/html/truck-me/venv/lib/python3.12/site-packages/firebase_admin/_sseclient.pyr	   zKeepAuthSession.__init__$   s   ø€ ÜŒo˜tÑ-¨jÕ9ó    c                  ó   — y r   © )r
   Úprepared_requestÚresponses      r   Úrebuild_authzKeepAuthSession.rebuild_auth'   s   € Ør   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   Ú__classcell__)r   s   @r   r   r   !   s   ø„ ÙSô:ör   r   c                   óB   — e Zd ZdZd„ Zd„ Zd„ Zed„ «       Zed„ «       Z	y)Ú_EventBufferz6A helper class for buffering and parsing raw SSE data.c                 ó    — g | _         d| _        y ©NÚ )Ú_bufferÚ_tail©r
   s    r   r	   z_EventBuffer.__init__.   s   € ØˆŒØˆ�
r   c                 óŒ   — | j                   j                  |«       | xj                  |z  c_        | j                  dd  | _        y )Néüÿÿÿ)r   Úappendr   )r
   Úchars     r   r#   z_EventBuffer.append2   s3   € Ø�‰×Ñ˜DÔ!Ø�
Š
�dÑ�
Ø—Z‘Z  �_ˆ�
r   c                 ó€   — | j                   j                  d«      \  }}}||z   }t        |«      | _        |dd  | _        y )Nú
r"   )Úbuffer_stringÚ
rpartitionÚlistr   r   )r
   ÚheadÚsepÚ_Úrems        r   Útruncatez_EventBuffer.truncate7   s?   € Ø×)Ñ)×4Ñ4°TÓ:‰ˆˆc�1Ø�S‰jˆÜ˜C“yˆŒØ˜˜�Xˆ�
r   c                 óZ   — | j                   dd  }|dk(  xs |dk(  xs | j                   dk(  S )Néþÿÿÿú

zz

)r   )r
   Úlast_two_charss     r   Úis_end_of_fieldz_EventBuffer.is_end_of_field=   s5   € àŸ™ B C˜ˆØ Ñ'Ò_¨>¸VÑ+CÒ_ÀtÇzÁzÐU_ÑG_Ð_r   c                 ó8   — dj                  | j                  «      S r   )Újoinr   r    s    r   r'   z_EventBuffer.buffer_stringB   s   € à�w‰w�t—|‘|Ó$Ð$r   N)
r   r   r   r   r	   r#   r.   Úpropertyr3   r'   r   r   r   r   r   +   s>   „ Ù@òò%ò
ð ñ`ó ð`ð ñ%ó ñ%r   r   c                   ó6   — e Zd ZdZd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)
Ú	SSEClientzSSE client implementation.c                 óð   — || _         || _        || _        || _        d| _        d| _        d| _        | j                  j                  di «      }d|d<   d|d<   || j                  d<   | j                  «        y)	a  Initializes the SSEClient.

        Args:
          url: The remote url to connect to.
          session: The requests session.
          retry: The retry interval in milliseconds (optional).
          **kwargs: Extra kwargs that will be sent to ``requests.get()`` (optional).
        TNr   Úheaderszno-cachezCache-Controlztext/event-streamÚAccept)	ÚurlÚsessionÚretryÚrequests_kwargsÚshould_connectÚlast_idÚbufÚgetÚ_connect)r
   r<   r=   r>   Úkwargsr:   s         r   r	   zSSEClient.__init__J   s|   € ð ˆŒØˆŒØˆŒ
Ø%ˆÔØ"ˆÔØˆŒØˆŒà×&Ñ&×*Ñ*¨9°bÓ9ˆà#-ˆ�Ñ à/ˆ�ÑØ*1ˆ×Ñ˜YÑ'Ø�‰�r   c                 óT   — d| _         d| _        | j                  j                  «        y)zCloses the SSEClient instance.Fr   N)r@   r>   ÚrespÚcloser    s    r   rH   zSSEClient.closec   s   € à#ˆÔØˆŒ
Ø�	‰	�‰Õr   c                 óf  — | j                   rœ| j                  r| j                  | j                  d   d<    | j                  j                  | j
                  fddi| j                  ¤Ž| _        | j                  j                  d¬«      | _        | j                  j                  «        yt        «       ‚)z&Connects to the server using requests.r:   zLast-Event-IDÚstreamT)Údecode_unicodeN)r@   rA   r?   r=   rC   r<   rG   Úiter_contentÚresp_iteratorÚraise_for_statusÚStopIterationr    s    r   rD   zSSEClient._connecti   s‰   € à×ÒØ�|Š|ØCGÇ<Á<�×$Ñ$ YÑ/°Ñ@Ø(˜Ÿ™×(Ñ(¨¯©ÑW¸$ÐWÀ$×BVÑBVÑWˆDŒIØ!%§¡×!7Ñ!7ÀtÐ!7Ó!LˆDÔØ�I‰I×&Ñ&Õ(ä“/Ð!r   c                 ó   — | S r   r   r    s    r   Ú__iter__zSSEClient.__iter__t   s   € Øˆr   c                 óJ  — t        j                  t        | j                  «      s[t	        «       }|j
                  s4	 t        | j                  «      }|j                  |«       |j
                  sŒ4|j"                  | _        t        j$                  t        | j                  «      }|d   }dj'                  |dd  «      | _        t(        j+                  |«      }|j,                  dk(  r| j                  «        y |j,                  dk(  ry |j                  r|j                  | _        |j.                  r|j.                  | _        |S # t        t        j                  f$ rF t        j                  | j                  dz  «       | j                  «        |j!                  «        Y �Œrw xY w)Ng     @�@r   r1   é   zcredential is no longer validÚnull)ÚreÚsearchÚend_of_fieldrB   r   r3   ÚnextrM   r#   rO   ÚrequestsÚRequestExceptionÚtimeÚsleepr>   rD   r.   r'   Úsplitr5   ÚEventÚparseÚdataÚevent_idrA   )r
   Útemp_bufferÚnextcharr]   r*   Úevents         r   Ú__next__zSSEClient.__next__w   sB  € Ü�y‰yœ t§x¡xÔ0Ü&›.ˆKØ!×1Ò1ð	Ü# D×$6Ñ$6Ó7�HØ×&Ñ& xÔ0ð "×1Ó1ð #×0Ñ0ˆDŒHä—‘œ t§x¡xÓ0ˆØ�Q‰xˆØ—;‘;˜u Q R˜yÓ)ˆŒÜ—‘˜DÓ!ˆà�:‰:Ð8Ò8Ø�M‰MŒOØØ�:‰:˜ÒØð �;Š;ØŸ™ˆDŒJð �>Š>Ø Ÿ>™>ˆDŒLØˆøô9 &¤x×'@Ñ'@ÐAò Ü—J‘J˜tŸz™z¨FÑ2Ô3Ø—M‘M”Oð  ×(Ñ(Ô*Úðús   ¼&E ÅAF"Æ!F"c                 ó"   — | j                  «       S r   )re   r    s    r   rX   zSSEClient.nextœ   s   € Ø�}‰}‹Ðr   N)i¸  )
r   r   r   r   r	   rH   rD   rQ   re   rX   r   r   r   r8   r8   G   s$   „ Ù$óò2ò	"òò#óJr   r8   c                   óL   — e Zd ZdZ ej
                  d«      Zdd„Zed„ «       Z	y)r^   z)Event represents the events fired by SSE.z#(?P<name>[^:]*):?( ?(?P<value>.*))?Nc                 ó<   — || _         || _        || _        || _        y r   )r`   Ú
event_typera   r>   )r
   r`   ri   ra   r>   s        r   r	   zEvent.__init__¥   s   € ØˆŒ	Ø$ˆŒØ ˆŒØˆ�
r   c                 óÎ  —  | «       }|j                  d«      D ]É  }| j                  j                  |«      }|€t        j                  d|z  t
        «       Œ>|j                  «       d   }|j                  «       d   }|dk(  rŒj|dk(  r+|j                  r|j                  ›d|›�|_        Œ’||_        Œš|dk(  r||_        Œ§|dk(  r||_	        Œ´|d	k(  sŒºt        |«      |_        ŒË |S )
zÿGiven a possibly-multiline string representing an SSE message, parses it
        and returns an Event object.

        Args:
          raw: the raw data to parse.

        Returns:
          Event: A new ``Event`` with the parameters initialized.
        r&   zInvalid SSE line: "%s"ÚnameÚvaluer   r`   rd   Úidr>   )r]   Ússe_line_patternÚmatchÚwarningsÚwarnÚSyntaxWarningÚ	groupdictr`   ri   ra   Úintr>   )ÚclsÚrawrd   Úlinero   rk   rl   s          r   r_   zEvent.parse«   sÝ   € ñ “ˆØ—I‘I˜d“Oò 	)ˆDØ×(Ñ(×.Ñ.¨tÓ4ˆEØˆ}ä—‘Ð6¸Ñ=¼}ÔMØà—?‘?Ó$ VÑ,ˆDØ—O‘OÓ% gÑ.ˆEØ�rŠzàØ�vŠ~ð —:’:Ø-2¯Z«Z¹Ð!?�E•Jà!&�E•JØ˜’Ø#(�Õ Ø˜’Ø!&�•Ø˜“Ü! %›j�•ð1	)ð2 ˆr   )r   ÚmessageNN)
r   r   r   r   rU   Úcompilern   r	   Úclassmethodr_   r   r   r   r^   r^       s0   „ Ù3à!�r—z‘zÐ"GÓHÐóð ñ$ó ñ$r   r^   )r   rU   r[   rp   Úgoogle.authr   rY   ry   rW   ÚAuthorizedSessionr   r   r8   r^   r   r   r   ú<module>r}      sg   ðñó
 
Û Û å !Û ð
 ˆr�z‰zÐ/Ó0€ô�i×(Ñ(×:Ñ:ô ÷%ñ %÷8Vñ V÷r0ò 0r   