a
    !f                     @   s^   d dl Z d dlZd dlZd dlZd dlZd dlZe dZG dd deZ	G dd deZ
dS )    Nz\r\n\r\n|\r\r|\n\nc                   @   s@   e Zd ZdddZdd Zdd Zd	d
 Zdd Zej	r<eZ
dS )	SSEClientN  c                 K   sr   || _ || _|| _d| _|| _|| _d | _|| _d| jvrDi | jd< d| jd d< d| jd d< d| _| 	  d S )NTheaderszno-cachezCache-Controlztext/event-streamAccept )
urllast_idretryrunningsessionbuild_headers
start_timerequests_kwargsbuf_connect)selfr   r   r   r   r	   kwargs r   X/var/www/html/python-backend/venv/lib/python3.9/site-packages/pyrebase/pyre_sseclient.py__init__   s    

zSSEClient.__init__c                 C   sv   | j r| j | jd d< |  }| jd | | jp6t| _| jj| jfddi| j| _	| j	j
dd| _| j	  d S )Nr   zLast-Event-IDstreamT)decode_unicode)r   r   r   updater   requestsZ	requestergetr   respiter_contentresp_iteratorraise_for_status)r   r   r   r   r   r   )   s    zSSEClient._connectc                 C   s   t t| jd uS N)researchend_of_fieldr   r   r   r   r   _event_complete8   s    zSSEClient._event_completec                 C   s   | S r   r   r#   r   r   r   __iter__;   s    zSSEClient.__iter__c              	   C   s   |   sxzt| j}|  j|7  _W q  ttjfyt   t| j	d  | 
  | jd\}}}|| | _Y q Y q 0 q tt| j}|d }d|dd  }|| _t|}|jdkr| 
  d S |jdkrd S |j	r|j	| _	|jr|j| _|S )Ng     @@
r   r      zcredential is no longer validnull)r$   nextr   r   StopIterationr   RequestExceptiontimesleepr	   r   
rpartitionr    splitr"   joinEventparsedataidr   )r   nextcharheadseptailr/   msgr   r   r   __next__>   s2    




zSSEClient.__next__)Nr   )__name__
__module____qualname__r   r   r$   r%   r:   sixPY2r)   r   r   r   r   r      s   
(r   c                   @   s<   e Zd ZedZdddZdd Zed	d
 Z	dd Z
dS )r1   z#(?P<name>[^:]*):?( ?(?P<value>.*))?r   messageNc                 C   s   || _ || _|| _|| _d S r   )r3   eventr4   r	   )r   r3   rA   r4   r	   r   r   r   r   n   s    zEvent.__init__c                 C   st   g }| j r|d| j   | jdkr4|d| j  | jrJ|d| j  |dd | jdD  d|d S )	Nzid: %sr@   z	event: %sz	retry: %sc                 s   s   | ]}d | V  qdS )zdata: %sNr   ).0dr   r   r   	<genexpr>       zEvent.dump.<locals>.<genexpr>r&   z

)r4   appendrA   r	   extendr3   r/   r0   )r   linesr   r   r   dumpt   s    
z
Event.dumpc                 C   s   |  }| dD ]}| j|}|du r:td| t q| d }| d }|dkr\q|dkr|jr|d|j|f |_q||_q|d	kr||_q|d
kr||_	q|dkrt
||_q|S )z|
        Given a possibly-multiline string representing an SSE message, parse it
        and return a Event object.
        r&   NzInvalid SSE line: "%s"namevaluer   r3   z%s
%srA   r4   r	   )r/   sse_line_patternmatchwarningswarnSyntaxWarning	groupdictr3   rA   r4   intr	   )clsrawr9   linemrJ   rK   r   r   r   r2      s*    zEvent.parsec                 C   s   | j S r   )r3   r#   r   r   r   __str__   s    zEvent.__str__)r   r@   NN)r;   r<   r=   r    compilerL   r   rI   classmethodr2   rW   r   r   r   r   r1   j   s   


#r1   )r    r,   rN   	threadingr>   r   rX   r"   objectr   r1   r   r   r   r   <module>   s   
\