
    +h%                         d dl mZ 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)    )	getLogger)AnyUnion   )ConnectionErrorInvalidResponseResponseError)
EncodableT   )_AsyncRESPBase	_RESPBase)SERVER_CLOSED_CONNECTION_ERRORc                   >     e Zd ZdZ fdZd ZddZddZd Z xZ	S )_RESP3ParserzRESP3 protocol implementationc                 F    t         |   |       | j                  | _        y Nsuper__init__handle_push_responsepush_handler_funcselfsocket_read_size	__class__s     G/var/www/html/venv/lib/python3.12/site-packages/redis/_parsers/resp3.pyr   z_RESP3Parser.__init__       )*!%!:!:    c                 V    t        d      }|j                  dt        |      z          |S Npush_responsezPush response: r   infostrr   responseloggers      r   r   z!_RESP3Parser.handle_push_response   '    ?+%H56r   c                    | j                   r| j                   j                         nd }	 | j                  ||      }| j                   j                          |S # t        $ r) | j                   r| j                   j                  |        w xY w)Ndisable_decodingpush_request)_bufferget_pos_read_responsepurgeBaseExceptionrewind)r   r+   r,   posresults        r   read_responsez_RESP3Parser.read_response   s    (,dll""$$
	((!1 ) F LL M  	||##C(	s   A 2Bc                 V   | j                   j                         }|st        t              |d d |dd  }}|dv ra|dk(  r$| j                   j	                  t        |            }|j                  dd      }| j                  |      }t        |t              r||S |dk(  rn|dk(  ry |d	v rt        |      S |d
k(  rt        |      S |dk(  r|dk(  S |dk(  r&| j                   j	                  t        |            }n`|dk(  r)| j                   j	                  t        |            dd  }n2|dk(  r2t        t        |            D cg c]  }| j                  |       }}n|dk(  r>t        t        |            D cg c]  }| j                  |       }}	 t        |      }n|dk(  rFi }t        t        |            D ]*  }| j                  |      }	| j                  ||      ||	<   , |}nm|dk(  rZt        t        |            D cg c]  }| j                  ||       }}| j                  |      }
|s| j                  ||      S |
S t        d|      t        |t               r|du r| j"                  j                  |      }|S c c}w c c}w # t        $ r Y Fw xY wc c}w )Nr      -   !r9   utf-8replaceerrors   +   _   :   (   ,   #   t   $   =      *r+      ~   %r*      >Protocol Error: F)r-   readliner   r   readintdecodeparse_error
isinstancefloatranger/   set	TypeErrorr   r   bytesencoder)r   r+   r,   rawbyter&   error_	resp_dictkeyress              r   r/   z_RESP3Parser._read_response$   s   ll##%!"@AARa#ab'h <t|<<,,S];wyAH$$X.E %1
 LT\T\\!x= T\?"T\t##T\||((X7HT\||((X7;HT\ s8}- ##5E#FH 
 T\
 s8}- ##5E#FH x= T\ I3x=) ));K)L!%!4!4%5L "5 "	#
 !HT\
 s8}-	  ##%5L $ H  ((2C**%5L +   
!$4SG"<==h&+;u+D||**84H_  s$   J<JJ 
J&	J#"J#c                     || _         y r   r   r   r   s     r   set_push_handlerz_RESP3Parser.set_push_handler   
    !2r   FF)
__name__
__module____qualname____doc__r   r   r5   r/   re   __classcell__r   s   @r   r   r   
   s!    ';
\|3r   r   c            
       b     e Zd Z fdZd Z	 d
dedefdZ	 d
dededeee	df   fdZ
d	 Z xZS )_AsyncRESP3Parserc                 F    t         |   |       | j                  | _        y r   r   r   s     r   r   z_AsyncRESP3Parser.__init__   r   r   c                 V    t        d      }|j                  dt        |      z          |S r    r"   r%   s      r   r   z&_AsyncRESP3Parser.handle_push_response   r(   r   r+   r,   c                   K   | j                   rH| xj                  dj                  | j                         z  c_        | j                   j                          d| _        | j                  ||       d {   }| j                          |S 7 w)Nr   r   r*   )_chunksr-   joinclear_posr/   _clear)r   r+   r,   r&   s       r   r5   z_AsyncRESP3Parser.read_response   su      <<LLCHHT\\22LLL 	,,-L - 
 
 	
s   A2B4B5BreturnNc                 4  K   | j                   r| j                  st        t              | j	                          d {   }|d d |dd  }}|dv ro|dk(  r"| j                  t        |             d {   }|j                  dd      }| j                  |      }t        |t              r| j                          ||S |dk(  rn|dk(  ry |d	v rt        |      S |d
k(  rt        |      S |dk(  r|dk(  S |dk(  r$| j                  t        |             d {   }n|dk(  r'| j                  t        |             d {   dd  }n`|dk(  r;t        t        |            D cg c]  }| j                  |       d {    }}n |dk(  rFt        t        |            D cg c]  }| j                  |       d {    }}	 t        |      }n|dk(  rSt        t        |            D ci c]5  }| j                  |       d {   | j                  |       d {   7 }}n}|dk(  rjt        t        |            D cg c]  }| j                  ||       d {    }}| j!                  |      }|s| j                  ||       d {   S |S t#        d|      t        |t$              r|du r| j                  j                  |      }|S 7 7 l7 7 7 hc c}w 7 0c c}w # t        $ r Y Xw xY w7 7 c c}w 7 c c}w 7 w)Nr   r7   r9   r:   r;   r<   r>   r?   r@   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r*   rN   F)_streamrZ   r   r   	_readline_readrQ   rR   rS   rT   rw   rU   rV   r/   rW   rX   r   r   rY   )	r   r+   r,   r[   r\   r&   r]   r^   ra   s	            r   r/   z _AsyncRESP3Parser._read_response   s]     ||4<<!"@AANN$$Ra#ab'h <t|!%CM!::wyAH$$X.E %1
 LT\T\\!x= T\?"T\t##T\!ZZH66HT\"jjX77<HT\ s8}- **<L*MMMH 
 T\
 s8}- **<L*MMMH x= T\
 s8}-	  **<L*MM--?O-PPQH  T\ s8}- 	 --)9 .   H  ((2C!00%5L 1    
!$4SG"<==h&+;u+D||**84Hy % ;< 7 8 N N  
 NPs  ;LK4L2K3B$LK!(L K$$L%K*?K'
 K*L%K2?K/
 K2L	K7 L0L

L
L
#L$L
*LL#L
$L*+LLALL!L$L'K**L/K22L7	L LLLL
L

LLLc                     || _         y r   rc   rd   s     r   re   z"_AsyncRESP3Parser.set_push_handler  rf   r   rg   )rh   ri   rj   r   r   boolr5   r   r
   r	   r/   re   rl   rm   s   @r   ro   ro      sc    ; DI $<@  DIa $a<@a	z=$.	/aF3r   ro   N)loggingr   typingr   r   
exceptionsr   r   r	   r
   baser   r   socketr   r   ro    r   r   <module>r      s7      H H  + 2y39 y3x}3 }3r   