
    +h                     |    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	e
      Z G d
 de	      Zy)    )AnyUnion   )ConnectionErrorInvalidResponseResponseError)
EncodableT   )_AsyncRESPBase	_RESPBase)SERVER_CLOSED_CONNECTION_ERRORc                        e Zd ZdZddZddZy)_RESP2ParserzRESP2 protocol implementationc                    | j                   r| j                   j                         nd }	 | j                  |      }| j                   j                          |S # t        $ r) | j                   r| j                   j                  |        w xY w)Ndisable_decoding)_bufferget_pos_read_responsepurgeBaseExceptionrewind)selfr   posresults       G/var/www/html/venv/lib/python3.12/site-packages/redis/_parsers/resp2.pyread_responsez_RESP2Parser.read_response   sy    (,dll""$$	((:J(KF LL M  	||##C(	s   A 2B
c                 h   | j                   j                         }|st        t              |d d |dd  }}|dk(  r8|j	                  dd      }| j                  |      }t        |t              r||S |dk(  rn|dk(  rt        |      S |dk(  r|d	k(  ry |dk(  r%| j                   j                  t        |            }nP|d
k(  r|d	k(  ry |d
k(  r2t        t        |            D cg c]  }| j                  |       }}nt        d|      |du r| j                  j	                  |      }|S c c}w )Nr
      -utf-8replaceerrors   +   :   $   -1   *r   Protocol Error: F)r   readliner   r   decodeparse_error
isinstanceintreadranger   r   encoder)r   r   rawbyteresponseerroris          r   r   z_RESP2Parser._read_response   sP   ll##%!"@AARa#ab'h 4<wyAH$$X.E %1
 LT\T\x= T\h%/T\||((X7HT\h%/T\ s8}- ##5E#FH 
 "$4SG"<==u$||**84Hs   $D/NF)__name__
__module____qualname____doc__r   r        r   r   r   	   s    '
,r=   r   c                   >    e Zd ZdZddefdZ	 ddedeeedf   fdZ	y)_AsyncRESP2Parserz"Async class for the RESP2 protocolr   c                 R  K   | j                   st        t              | j                  rH| xj                  dj                  | j                        z  c_        | j                  j                          d| _        | j                  |       d {   }| j                          |S 7 w)Nr=   r   r   )

_connectedr   r   _chunksr   joinclear_posr   _clear)r   r   r4   s      r   r   z_AsyncRESP2Parser.read_responseJ   s}     !"@AA<<LLCHHT\\22LLL 	,,>N,OO Ps   BB'B%B'returnNc                   K   | j                          d {   }|d d |dd  }}|dk(  rH|j                  dd      }| j                  |      }t        |t              r| j                          ||S |dk(  rn|dk(  rt        |      S |dk(  r|d	k(  ry |dk(  r#| j                  t        |             d {   }nW|d
k(  r|d	k(  ry |d
k(  r9t        t        |            D cg c]  }| j                  |       d {    }}nt        d|      |du r| j                  j                  |      }|S 7 7 7 =c c}w w)Nr
   r   r    r!   r"   r$   r%   r&   r'   r(   r)   F)	_readliner+   r,   r-   r   rF   r.   _readr0   r   r   r1   )r   r   r2   r3   r4   r5   _s          r   r   z _AsyncRESP2Parser._read_responseW   s_     NN$$Ra#ab'h 4<wyAH$$X.E %1
 LT\T\x= T\h%/T\!ZZH66HT\h%/T\ s8}- **+;<<<H 
 "$4SG"<==u$||**84HU %8 7 =sF   D?D3BD?5D66+D?!D::D8
;D:3D?6D?8D::D?r7   )
r8   r9   r:   r;   boolr   r   r	   r   r   r<   r=   r   r?   r?   G   s7    ,D  (-- $-	z=$.	/-r=   r?   N)typingr   r   
exceptionsr   r   r   r	   baser   r   socketr   r   r?   r<   r=   r   <module>rQ      s0     H H  + 2;9 ;|= =r=   