o
    Lj                     @   s|   d dl mZmZ ddlmZmZmZ ddl mZ ddlm	Z	 ddl
mZmZ ddlmZ G d	d
 d
eZG dd deZdS )    )AnyUnion   )ConnectionErrorInvalidResponseResponseError)
EncodableT)SENTINEL   )_AsyncRESPBase	_RESPBase)SERVER_CLOSED_CONNECTION_ERRORc                   @   sH   e Zd ZdZdefdeeef fddZdefdeeef fddZ	dS )	_RESP2ParserzRESP2 protocol implementationFtimeoutc                 C   sX   | j r| j  nd }z	| j||d}W n ty$   | j r#| j |  w | j   |S )Ndisable_decodingr   )_bufferget_pos_read_responseBaseExceptionrewindpurge)selfr   r   posresult r   R/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/redis/_parsers/resp2.pyread_response   s   

z_RESP2Parser.read_responsec                    s  j jd}|stt|d d |dd  }}|dkr3|jddd}|}t|tr1||S |dkr8nF|dkr@t|S |d	krJ|d
krJd S |d	krYj jt|d}n%|dkrc|d
krcd S |dkrw fddt	t|D }nt
d| du rj|}|S )N)r   r
      -utf-8replaceerrors   +   :   $   -1   *c                    s   g | ]	}j  d qS )r   r   ).0ir   r   r   r   r   
<listcomp>B   s    z/_RESP2Parser._read_response.<locals>.<listcomp>Protocol Error: F)r   readliner   r   decodeparse_error
isinstanceintreadranger   encoder)r   r   r   rawbyteresponseerrorr   r+   r   r      s8   


z_RESP2Parser._read_responseN)
__name__
__module____qualname____doc__r	   r   floatobjectr   r   r   r   r   r   r   
   s    


r   c                   @   s@   e Zd ZdZd
defddZ	d
dedeeedf fdd	Z	dS )_AsyncRESP2Parserz"Async class for the RESP2 protocolFr   c                    sZ   | j stt| jr|  jd| j7  _| j  d| _| j|dI d H }| 	  |S )N    r   )r   )

_connectedr   r   _chunksr   joinclear_posr   _clear)r   r   r8   r   r   r   r   Q   s   
z_AsyncRESP2Parser.read_responsereturnNc                    s    I d H }|d d |dd  }}|dkr2|jddd}|}t|tr0  ||S |dkr7nH|dkr?t|S |dkrI|d	krId S |dkrXt|I d H }n'|d
krb|d	krbd S |d
krx fddtt|D I d H }nt	d| du rj
|}|S )Nr
   r   r   r    r!   r#   r$   r%   r&   r'   c                    s   g | ]
}  I d H qS )Nr(   )r)   _r   r   r   r   r,      s
    z4_AsyncRESP2Parser._read_response.<locals>.<listcomp>r-   F)	_readliner/   r0   r1   r   rG   r2   _readr4   r   r5   )r   r   r6   r7   r8   r9   r   rJ   r   r   ^   s8   


z _AsyncRESP2Parser._read_response)F)
r:   r;   r<   r=   boolr   r   r   r   r   r   r   r   r   r@   N   s    r@   N)typingr   r   
exceptionsr   r   r   r   utilsr	   baser   r   socketr   r   r@   r   r   r   r   <module>   s    D