U
    g                     @   sp   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	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   )_AsyncRESPBase	_RESPBase)SERVER_CLOSED_CONNECTION_ERRORc                   @   s$   e Zd ZdZdddZd	ddZdS )
_RESP2ParserzRESP2 protocol implementationFc                 C   s`   | j r| j  nd }z| j|d}W n( tk
rL   | j rF| j |  Y nX | j   |S d S )Ndisable_decoding)_bufferZget_pos_read_responseBaseExceptionrewindpurge)selfr   posresult r   8/tmp/pip-unpacked-wheel-f3sx1i9r/redis/_parsers/resp2.pyread_response   s    
z_RESP2Parser.read_responsec                    s  j  }|stt|d d |dd   }}|dkrb|jddd}|}t|tr^||S |dkrln|dkr|t|S |dkr|d	krd S |dkrj t|}nH|d
kr|d	krd S |d
kr fddt	t|D }nt
d| dkrj|}|S )Nr	      -utf-8replaceerrors   +   :   $   -1   *c                    s   g | ]}j  d qS )r   r   ).0ir   r   r   r   
<listcomp>;   s   z/_RESP2Parser._read_response.<locals>.<listcomp>Protocol Error: F)r   readliner   r   decodeparse_error
isinstanceintreadranger   encoderr   r   rawbyteresponseerrorr   r(   r   r      s8    




z_RESP2Parser._read_responseN)F)F)__name__
__module____qualname____doc__r   r   r   r   r   r   r   	   s   
r   c                   @   s<   e Zd ZdZd
edddZdeeeedf ddd	Z	dS )_AsyncRESP2Parserz"Async class for the RESP2 protocolFr   c                    sX   | j stt| jr4|  jd| j7  _| j  d| _| j|dI d H }| 	  |S )N    r   r   )

_connectedr   r   _chunksr   joinclear_posr   _clear)r   r   r6   r   r   r   r   J   s    
z_AsyncRESP2Parser.read_responseN)r   returnc                    s    I d H }|d d |dd   }}|dkrb|jddd}|}t|tr^  ||S |dkrln|dkr|t|S |dkr|d	krd S |dkrt|I d H }nN|d
kr|d	krd S |d
kr fddtt|D I d H }nt	d| dk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)   {   s   z4_AsyncRESP2Parser._read_response.<locals>.<listcomp>r*   F)Z	_readliner,   r-   r.   r   rC   r/   _readr1   r   r2   r3   r   r(   r   r   W   s6    



z _AsyncRESP2Parser._read_response)F)F)
r8   r9   r:   r;   boolr   r   r   r   r   r   r   r   r   r<   G   s    r<   N)typingr   r   
exceptionsr   r   r   r   baser
   r   socketr   r   r<   r   r   r   r   <module>   s   >