
    $gw+                         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 d	d
gZ G d de          Z G d de          ZdS )    )	getLogger)AnyUnion   )ConnectionErrorInvalidResponseResponseError)
EncodableT   )_AsyncRESPBase	_RESPBase)SERVER_CLOSED_CONNECTION_ERRORs
   invalidate
invalidatec                   J     e Zd ZdZ fdZd Zd
dZd
dZd Zd Z	d	 Z
 xZS )_RESP3ParserzRESP3 protocol implementationc                 p    t                                          |           | j        | _        d | _        d S Nsuper__init__handle_pubsub_push_responsepubsub_push_handler_funcinvalidation_push_handler_funcselfsocket_read_size	__class__s     T/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/redis/_parsers/resp3.pyr   z_RESP3Parser.__init__   5    )***(,(H%.2+++    c                 n    t          d          }|                    dt          |          z              |S Npush_responsezPush response: r   infostrr   responseloggers      r   r   z(_RESP3Parser.handle_pubsub_push_response   s2    ?++%H5666r    Fc                    | j         r| j                                         nd }	 |                     ||          }| j                                          |S # t          $ r# | j         r| 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    (,>dl""$$$$
	((!1 )  F L   M  	 	 	| )##C(((	s   A -Bc                      j                                         }|st          t                    |d d         |dd          }}|dv rr|dk    r' j                             t          |                    }|                    dd          }                     |          }t          |t                    r||S |dk    rn|dk    rd S |d	v rt          |          S |d
k    rt          |          S |dk    r|dk    S |dk    r) j                             t          |                    }ne|dk    r1 j                             t          |                    dd          }n.|dk    r* fdt          t          |                    D             }n|dk    r* fdt          t          |                    D             }n|dk    rTi }t          t          |                    D ]2}                               }	                               ||	<   3|}nt|dk    r\ fdt          t          |                    D             }                     |          }s                               S |S t          d|          t          |t                    rdu r j                            |          }|S )Nr      -   !r:   utf-8replaceerrors   +   _   :   (   ,   #   t   $   =      *c                 <    g | ]}                                S r,   r0   .0_r,   r   s     r   
<listcomp>z/_RESP3Parser._read_response.<locals>.<listcomp>T   ;        ##5E#FF  r       ~c                 <    g | ]}                                S rL   rN   rO   s     r   rR   z/_RESP3Parser._read_response.<locals>.<listcomp>\   rS   r       %rM   r+      >c                 >    g | ]}                                S )r+   rN   rP   rQ   r,   r-   r   s     r   rR   z/_RESP3Parser._read_response.<locals>.<listcomp>n   sE         ##%5L $    r    Protocol Error: F)r.   readliner   r   readintdecodeparse_error
isinstancefloatranger0   handle_push_responser   bytesencoder
r   r,   r-   rawbyter(   error	resp_dictrQ   keys
   ```       r   r0   z_RESP3Parser._read_response'   s^   l##%% 	B!"@AAARaR#abb'h <t||<,,S]];;wyAAH$$X..E %11 
 LT\\T\\4\!!x== T\\??"T\\t##T\\|((X77HHT\\|((X77;HHT\\    s8}}--  HH
 T\\    s8}}--  HH
 T\\ I3x==))  ));K)LL!%!4!4%5L "5 " "	# !HHT\\      s8}}--	  H 00*L H    **%5L +     !"<S"<"<===h&& 	5+;u+D+D|**844Hr    c                     |d         t           vr|                     |          S | j        r|                     |          S d S Nr   _INVALIDATION_MESSAGEr   r   r   r(   r,   r-   s       r   rc   z!_RESP3Parser.handle_push_response   sR    A;33300:::. 	A66x@@@	A 	Ar    c                     || _         d S r   r   r   r   s     r   set_pubsub_push_handlerz$_RESP3Parser.set_pubsub_push_handler       (@%%%r    c                     || _         d S r   r   r   r   s     r   set_invalidation_push_handlerz*_RESP3Parser.set_invalidation_push_handler       .L+++r    FF)__name__
__module____qualname____doc__r   r   r6   r0   rc   rt   ry   __classcell__r   s   @r   r   r      s        ''3 3 3 3 3
  
   [ [ [ [zA A AA A AM M M M M M Mr    r   c            
       t     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d Zd Z xZS )_AsyncRESP3Parserc                 p    t                                          |           | j        | _        d | _        d S r   r   r   s     r   r   z_AsyncRESP3Parser.__init__   r   r    c                 r   K   t          d          }|                    dt          |          z              |S r"   r$   r'   s      r   r   z-_AsyncRESP3Parser.handle_pubsub_push_response   s6      ?++%H5666r    Fr,   r-   c                 
  K   | j         rA| xj        d                    | j                   z  c_        | j                                          d| _        |                     ||           d {V }|                                  |S )Nr    r   r+   )_chunksr.   joinclear_posr0   _clear)r   r,   r-   r(   s       r   r6   z_AsyncRESP3Parser.read_response   s       < 	!LLCHHT\222LLL   	,,-L - 
 
 
 
 
 
 
 
 	r    returnNc                 6   K    j         r j        st          t                                                      d {V }|d d         |dd          }}|dv r|dk    r(                     t          |                     d {V }|                    dd          }                     |          }t          |t                    r 
                                 ||S |dk    rn|dk    rd S |d	v rt          |          S |d
k    rt          |          S |dk    r|dk    S |dk    r*                     t          |                     d {V }n|dk    r2                     t          |                     d {V dd          }nY|dk    r1 fdt          t          |                    D              d {V }n"|dk    r0 fdt          t          |                    D              d {V }n|dk    r`i }t          t          |                    D ]>}                                d {V }	                                d {V ||	<   ?|}n|dk    rn fdt          t          |                    D              d {V }                     |           d {V }s                                d {V S |S t          d|          t          |t                     rdu r j                            |          }|S )Nr   r8   r:   r;   r<   r=   r?   r@   rA   rD   rE   rF   rG   rH   rI   rJ   c                 L   K   g | ]}                                 d{V S rM   NrN   rO   s     r   rR   z4_AsyncRESP3Parser._read_response.<locals>.<listcomp>   Q          **<L*MMMMMMMM  r    rT   c                 L   K   g | ]}                                 d{V S r   rN   rO   s     r   rR   z4_AsyncRESP3Parser._read_response.<locals>.<listcomp>   r   r    rV   rM   r+   rW   c                 N   K   g | ]}                                 d{V  S )r+   NrN   rY   s     r   rR   z4_AsyncRESP3Parser._read_response.<locals>.<listcomp>   sg          	 --)9 .          r    rZ   F)_streamre   r   r   	_readline_readr]   r^   r_   r`   r   ra   rb   r0   rc   r   rd   rf   s
   ```       r   r0   z _AsyncRESP3Parser._read_response   s{      | 	B4< 	B!"@AAANN$$$$$$$$RaR#abb'h <t||!%CMM!:!:::::::wyAAH$$X..E %11 
 LT\\T\\4\!!x== T\\??"T\\t##T\\!ZZH66666666HHT\\"jjX77777777<HHT\\    s8}}--        HH
 T\\    s8}}--        HH
 T\\ I3x==))   //AQ/RRRRRRRR'+':':%5L (; ( ( " " " " " "	# !HHT\\      s8}}--        H "66*L       H    !00%5L 1           !"<S"<"<===h&& 	5+;u+D+D|**844Hr    c                    K   |d         t           vr|                     |           d {V S | j        r|                     |           d {V S d S rm   rn   rp   s       r   rc   z&_AsyncRESP3Parser.handle_push_response  sz      A;33366x@@@@@@@@@. 	G<<XFFFFFFFFF	G 	Gr    c                     || _         d S r   rr   rs   s     r   rt   z)_AsyncRESP3Parser.set_pubsub_push_handler  ru   r    c                     || _         d S r   rw   rx   s     r   ry   z/_AsyncRESP3Parser.set_invalidation_push_handler  rz   r    r{   )r|   r}   r~   r   r   boolr6   r   r
   r	   r0   rc   rt   ry   r   r   s   @r   r   r      s        3 3 3 3 3
   DI  $<@     DIc c $c<@c	z=$.	/c c c cJG G GA A AM M M M M M Mr    r   N)loggingr   typingr   r   
exceptionsr   r   r	   r
   baser   r   socketr   ro   r   r    r    r   <module>r      s                 H H H H H H H H H H       + + + + + + + + 2 2 2 2 2 2&5 BM BM BM BM BM9 BM BM BMJIM IM IM IM IM IM IM IM IM IMr    