o
    i                     @   sR   d dl mZmZ ddlmZ dedee fddZG dd	 d	ZG d
d dZdS )    )ListOptional   )ServerSentEventtextreturnc                 C   sR   | sg S d| vr|  d}n| dddd}| d}| d dv r'|  |S )zSplit text on 
, , or 
 only.
z
)splitreplacepop)r   lines
normalized r   P/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/httpx_sse/_decoders.py_splitlines_sse   s   
r   c                   @   sB   e Zd ZdZdddZdedee fddZdee fd	d
ZdS )SSELineDecodera  
    Handles incrementally reading lines from text.

    Mostly a copy of httpx._decoders.LineDecoder, but as per SSE spec, only 
, ,
    and 
 are treated as newlines, which differs from the behavior of splitlines()
    used by httpx._decoders.LineDecoder.
    r   Nc                 C   s   g | _ d| _d S )NF)buffertrailing_crselfr   r   r   __init__    s   
zSSELineDecoder.__init__r   c                 C   s   | j r
d| }d| _ |drd| _ |d d }|sg S |d dv }t|}t|dkr8|s8| j|d  g S | jrOd| j|d  g|dd   }g | _|sW| g| _|S )	Nr   FTr
   z
r   r    )r   endswithr   lenr   appendjoinr   )r   r   trailing_newliner   r   r   r   decode$   s&   
"zSSELineDecoder.decodec                 C   s.   | j s| jsg S d| j g}g | _ d| _|S )Nr   F)r   r   r   )r   r   r   r   r   flushG   s   zSSELineDecoder.flushr   N)	__name__
__module____qualname____doc__r   strlistr   r    r   r   r   r   r      s
    
#r   c                   @   s,   e Zd ZdddZdedee fddZdS )	
SSEDecoderr   Nc                 C   s   d| _ g | _d| _d | _d S )Nr   )_event_data_last_event_id_retryr   r   r   r   r   R   s   
zSSEDecoder.__init__linec              	   C   s  |s,| j s| js| js| jd u rd S t| j d| j| j| jd}d| _ g | _d | _|S |dr3d S |d\}}}|drF|dd  }|dkrO|| _ d S |dkr[| j| d S |d	krkd
|v rf	 d S || _d S |dkrzt	|| _W d S  t
tfy   Y d S w 	 d S )Nr	   )eventdataidretryr   : r   r.   r/   r0    r1   )r)   r*   r+   r,   r   r   
startswith	partitionr   int	TypeError
ValueError)r   r-   sse	fieldname_valuer   r   r   r   X   s\   



	zSSEDecoder.decoder!   )r"   r#   r$   r   r&   r   r   r   r   r   r   r   r(   Q   s    
r(   N)	typingr   r   _modelsr   r&   r   r   r(   r   r   r   r   <module>   s
    :