
    Pf3                        d dl Z d dlmZ d dlmZmZmZ d dlmZm	Z	m
Z
 e j        j        dk    re j        j        dk    rd dlmZ nd dlmZ dd	lmZmZmZmZmZmZmZmZmZmZmZmZ dd
lmZ ddlmZ ddl m!Z!m"Z" dZ#dZ$dZ%dZ&eedZ' G d de          Z( G d de(          Z) G d de(          Z* G d de*          Z+dS )    N)ABC)IncompleteReadErrorStreamReaderTimeoutError)ListOptionalUnion      )timeout   )AuthenticationError$AuthenticationWrongNumberOfArgsErrorBusyLoadingErrorConnectionErrorExecAbortErrorModuleErrorNoPermissionErrorNoScriptErrorOutOfMemoryErrorReadOnlyError
RedisErrorResponseError)
EncodableT   )Encoder)SERVER_CLOSED_CONNECTION_ERRORSocketBufferz:Error loading the extension. Please check the server logs.z5Error unloading module: no such module with that namez/Error unloading module: operation not possible.z[Error unloading module: the module exports one or more module-side data types, can't unload)zxAUTH <password> called without any password configured for the default user. Are you sure your configuration is correct?z(Client sent AUTH, but no password is setc                   l    e Zd Zdedededeeeeee	ee
eieeeeeeeeed	Zed             Zd Zd Zd	S )

BaseParserzmax number of clients reachedzinvalid passwordz,wrong number of arguments for 'auth' commandz,wrong number of arguments for 'AUTH' command)	ERROOM	WRONGPASS	EXECABORTLOADINGNOSCRIPTREADONLYNOAUTHNOPERMc                 ,   |                     d          d         }|| j        v rb|t          |          dz   d         }| j        |         }t          |t                    r|                    |t                    } ||          S t          |          S )zParse an error response r   r   N)splitEXCEPTION_CLASSESlen
isinstancedictgetr   )clsresponse
error_codeexception_classs       E/var/www/html/env/lib/python3.11/site-packages/redis/_parsers/base.pyparse_errorzBaseParser.parse_errorM   s     ^^C((+
...J! 3 5 56H!3J?O/400 O"1"5"5h"N"N"?8,,,X&&&    c                     t                      NNotImplementedErrorselfs    r6   on_disconnectzBaseParser.on_disconnectY       !###r8   c                     t                      r:   r;   r>   
connections     r6   
on_connectzBaseParser.on_connect\   r@   r8   N)__name__
__module____qualname__r   r   r   MODULE_LOAD_ERRORr   MODULE_EXPORTS_DATA_TYPES_ERRORNO_SUCH_MODULE_ERROR MODULE_UNLOAD_NOT_POSSIBLE_ERRORNO_AUTH_SET_ERRORr   r   r   r   r   r   r-   classmethodr7   r?   rD    r8   r6   r    r    0   s         ,_ 3!"F!"F{+[ +,k
  
"  (##!!%#3 8 	' 	' [	'$ $ $$ $ $ $ $r8   r    c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )	_RESPBasez&Base class for sync-based resp parsingc                 >    || _         d | _        d | _        d | _        d S r:   )socket_read_sizeencoder_sock_bufferr>   rR   s     r6   __init__z_RESPBase.__init__c   s#     0
r8   c                 R    	 |                                   d S # t          $ r Y d S w xY wr:   )r?   	Exceptionr=   s    r6   __del__z_RESPBase.__del__i   sA    	      	 	 	DD	s    
&&c                     |j         | _         t          | j         | j        |j                  | _        |j        | _        dS )zCalled when the socket connectsN)rT   r   rR   socket_timeoutrU   rS   rB   s     r6   rD   z_RESPBase.on_connecto   s<    %
#J-z/H
 
 ")r8   c                 p    d| _         | j         | j                                         d| _        d| _        dS )z"Called when the socket disconnectsN)rT   rU   closerS   r=   s    r6   r?   z_RESPBase.on_disconnectw   s7    
<#L   DLr8   c                 D    | j         o| j                             |          S r:   )rU   can_read)r>   r   s     r6   r`   z_RESPBase.can_read   s    |> 5 5g > >>r8   N)	rE   rF   rG   __doc__rW   rZ   rD   r?   r`   rN   r8   r6   rP   rP   `   se        00    * * *  ? ? ? ? ?r8   rP   c            
       b    e Zd ZdZdZdefdZdefdZ	 ddede	e
ed	ee
         f         fd
Zd	S )AsyncBaseParserz5Base parsing class for the python-backed async parser_stream
_read_sizerR   c                 "    d | _         || _        d S r:   rd   rV   s     r6   rW   zAsyncBaseParser.__init__   s    /3*r8   returnc                 "   K   t                      r:   r;   r=   s    r6   can_read_destructivez$AsyncBaseParser.can_read_destructive   s      !###r8   Fdisable_decodingNc                 "   K   t                      r:   r;   )r>   rk   s     r6   read_responsezAsyncBaseParser.read_response   s       "###r8   )F)rE   rF   rG   ra   	__slots__intrW   boolrj   r	   r   r   r   rm   rN   r8   r6   rc   rc      s        ??'I+ + + + +$D $ $ $ $ (-$ $ $$	z=$Z0@@	A$ $ $ $ $ $r8   rc   c                   v     e Zd ZdZej        dz   Zdef fdZd Zd Z	d Z
defd	Zd
edefdZdefdZ xZS )_AsyncRESPBasez!Base class for async resp parsing)rS   rU   _pos_chunksrR   c                     t                                          |           d | _        d| _        g | _        d| _        d S )Nr8   r   )superrW   rS   rU   rt   rs   )r>   rR   	__class__s     r6   rW   z_AsyncRESPBase.__init__   s<    )****.			r8   c                 F    d| _         | j                                         d S )Nr8   )rU   rt   clearr=   s    r6   _clearz_AsyncRESPBase._clear   s#    r8   c                     |j         | _        | j        t          d          |j        | _        |                                  d| _        dS )zCalled when the stream connectsNBuffer is closed.T)_readerre   r   rS   rz   
_connectedrB   s     r6   rD   z_AsyncRESPBase.on_connect   sE    !)<0111!)r8   c                     d| _         dS )z"Called when the stream disconnectsFN)r~   r=   s    r6   r?   z_AsyncRESPBase.on_disconnect   s    r8   rh   c                   K   | j         st          d          | j        rdS 	 t          d          4 d {V  | j                                        cd d d           d {V  S # 1 d {V swxY w Y   d S # t          $ r Y dS w xY w)Nr|   Tr   F)r~   r   rU   async_timeoutre   at_eofr   r=   s    r6   rj   z#_AsyncRESPBase.can_read_destructive   s2      	20111< 	4	$Q'' - - - - - - - -|**,,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 	 	 	55	s4   A7 A$A7 $
A..A7 1A.2A7 7
BBlengthc                   K   |dz   }| j         |z   }t          | j                  |k    r| j        | j         |dz
           }n| j        | j         d         }	 | j                            |t          |          z
             d{V }n'# t
          $ r}t          t                    |d}~ww xY w||z   dd         }| j        	                    |           | xj         |z  c_         |S )z
        Read `length` bytes of data.  These are assumed to be followed
        by a '
' terminator which is subsequently discarded.
        r   N)
rs   r.   rU   re   readexactlyr   r   r   rt   append)r>   r   wantendresulttaildataerrors           r6   _readz_AsyncRESPBase._read   s     
 zi$t|##\$)cAg"56FF<	,DQ!\55dSYY6FGGGGGGGG& Q Q Q%&DEE5PQTk3B3'FL%%%		T		s   0B 
B,B''B,c                   K   | j                             d| j                  }|dk    r| j         | j        |         }n| j         | j        d         }| j                                         d{V }|                    d          st          t                    ||z   dd         }| j        	                    |           | xj        t          |          dz   z  c_        |S )zq
        read an unknown number of bytes up to the next '
'
        line separator, which is discarded.
        s   
r   Nr   r   )rU   findrs   re   readlineendswithr   r   rt   r   r.   )r>   foundr   r   r   s        r6   	_readlinez_AsyncRESPBase._readline   s      
 !!'4955A::\$)e"34FF<	,D..00000000D==)) F%&DEEETk3B3'FL%%%		S[[1_$		r8   )rE   rF   rG   ra   rc   rn   ro   rW   rz   rD   r?   rp   rj   bytesr   r   __classcell__)rw   s   @r6   rr   rr      s        ++),UUI               	D 	 	 	 	# %    (        r8   rr   ),sysabcr   asyncior   r   r   typingr   r   r	   version_infomajorminorr   r   
exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   encodersr   socketr   r   rH   rJ   rK   rI   rL   r    rP   rc   rr   rN   r8   r6   <module>r      s]   



       C C C C C C C C C C ( ( ( ( ( ( ( ( ( (Q3#3#9R#?#?0000000666666                                         @ @ @ @ @ @ @ @S N #W     ':0C  -$ -$ -$ -$ -$ -$ -$ -$` ?  ?  ?  ?  ?
  ?  ?  ?F$ $ $ $ $j $ $ $$L L L L L_ L L L L Lr8   