o
    h                     @   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   s   g }d}d}|t | k rR|t | d k r0| ||d  dkr0|| ||  |d }|d7 }n| | dv rH|| ||  |d }|d7 }n|d7 }|t | k s|t | k ra|| |d  |S )z#Split text on \r\n, \r, or \n only.r   r      z
N)lenappend)r   linesstarti r   T/var/www/html/openai_agents/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 )	NFTz
r   r    )r   endswithr   r	   r   r
   joinpop)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   flushQ   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   \   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 )N
)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   b   s\   



	zSSEDecoder.decoder    )r!   r"   r#   r   r%   r   r   r   r   r   r   r   r'   [   s    
r'   N)	typingr   r   _modelsr   r%   r   r   r'   r   r   r   r   <module>   s
    :