o
    >h*                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
 ejjdkr3ejjdkr3d dl mZ nd dlmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlmZmZmZmZ ddlmZmZmZmZ e  Z!G dd de	ddZ"G dd deeZ#G dd deeZ$dS )    N)	getLogger)CallableListOptional	TypedDictUnion      )timeout   )ConnectionErrorInvalidResponse
RedisError)
EncodableT)HIREDIS_AVAILABLE   )AsyncBaseParserAsyncPushNotificationsParser
BaseParserPushNotificationsParser)#NONBLOCKING_EXCEPTION_ERROR_NUMBERSNONBLOCKING_EXCEPTIONSSENTINELSERVER_CLOSED_CONNECTION_ERRORc                   @   sJ   e Zd ZU eegef ed< eegef ed< ee ed< ee ed< dS )_HiredisReaderArgsprotocolError
replyErrorencodingerrorsN)__name__
__module____qualname__r   str	Exception__annotations__r    r%   r%   v/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/redis/_parsers/hiredis.pyr   "   s
   
 r   F)totalc                   @   sX   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dfddZdddZdS )_HiredisParserz*Parser class for connections using Hiredisc                 C   s4   t std|| _t|| _| j| _d | _d | _d S )NzHiredis is not installed)	r   r   socket_read_size	bytearray_bufferhandle_pubsub_push_responsepubsub_push_handler_funcinvalidation_push_handler_func_hiredis_PushNotificationTypeselfr)   r%   r%   r&   __init__,   s   

z_HiredisParser.__init__c                 C   s$   z|    W d S  ty   Y d S w N)on_disconnectr#   r1   r%   r%   r&   __del__5   s
   z_HiredisParser.__del__c                 C   s   t d}|dt|  |S Npush_responsezPush response: r   debugr"   r1   responseloggerr%   r%   r&   r,   ;   s   z*_HiredisParser.handle_pubsub_push_responsec                 K   s   dd l }|j| _|j| _t| j|jjtd}|jj	r |jj
|d< |jdi || _t| _z|j| _W d S  ty@   d | _Y d S w )Nr   )r   r   r   notEnoughDatar   r%   )hiredis_socksocket_timeout_socket_timeoutr   parse_errorencoderencoding_errorsNOT_ENOUGH_DATAdecode_responsesr   Reader_reader_next_responsePushNotificationr/   AttributeError)r1   
connectionkwargsr?   r%   r%   r&   
on_connect@   s"   z_HiredisParser.on_connectc                 C   s   d | _ d | _t| _d S r3   )r@   rI   rF   rJ   r5   r%   r%   r&   r4   W   s   
z_HiredisParser.on_disconnectc                 C   s@   | j stt| jtu r| j  | _| jtu r| j|ddS dS )NF)r
   raise_on_timeoutT)rI   r   r   rJ   rF   getsread_from_socket)r1   r
   r%   r%   r&   can_read\   s   

z_HiredisParser.can_readTc              
   C   s  | j }|tu}z}z-|r|| | j | j}|dkrtt| j| jd| W W |r4|| j	 dS dS  t
jyQ   |rCtdY W |rO|| j	 dS dS  ty } z(t|jd}|sx|j|krxW Y d }~W |rv|| j	 dS dS td|j d }~ww |r|| j	 w w )Nr   TzTimeout reading from socketFz!Error while reading from socket: )r@   r   
settimeout	recv_intor+   r   r   rI   feedrB   socketr
   TimeoutErrorr   r   get	__class__errnoargs)r1   r
   rP   sockcustom_timeoutbufflenexallowedr%   r%   r&   rR   f   sB   

z_HiredisParser.read_from_socketFc                 C   s  | j stt| jtur/| j}t| _| jd ur-t|| jr-| |}|s+| j||dS |S |S |r8| j 	d}n| j 	 }|tu rW| 
  |rN| j 	d}n| j 	 }|tu sAt|tr^|| jd uryt|| jry| |}|sw| j||dS |S t|tr|rt|d tr|d |S )Ndisable_decodingpush_requestFr   )rI   r   r   rJ   rF   r/   
isinstancehandle_push_responseread_responserQ   rR   listr1   rd   re   r<   r%   r%   r&   rh      sV   




	
z_HiredisParser.read_responseNFF)r   r    r!   __doc__r2   r6   r,   rO   r4   rS   r   rR   rh   r%   r%   r%   r&   r(   )   s    	
r(   c                
       sx   e Zd ZdZdZdef fddZdd Zdd	 Zd
d Z	dd Z
dd Z	ddededeeee f fddZ  ZS )_AsyncHiredisParserzBAsync implementation of parser class for connections using Hiredis)rI   r)   c                    s8   t stdt j|d d | _| j| _d | _d | _d S )NzHiredis is not available.)r)   )	r   r   superr2   rI   r,   r-   r.   r/   r0   r[   r%   r&   r2      s   
z_AsyncHiredisParser.__init__c                    s    t d}|dt|  |S r7   r9   r;   r%   r%   r&   r,      s   z/_AsyncHiredisParser.handle_pubsub_push_responsec                 C   s   dd l }|j| _t| jtd}|jjr|jj|d< |jj	|d< |j
di || _d| _z
t|dd | _W d S  tyB   d | _Y d S w )Nr   )r   r   r>   r   r   TrK   r%   )r?   rI   _streamr   rC   rF   rD   rG   r   rE   rH   
_connectedgetattrr/   rL   )r1   rM   r?   rN   r%   r%   r&   rO      s$   z_AsyncHiredisParser.on_connectc                 C   s
   d| _ d S )NF)rq   r5   r%   r%   r&   r4      s   
z!_AsyncHiredisParser.on_disconnectc              	      s   | j stt| j turdS z)td4 I d H  |  I d H W  d   I d H  W S 1 I d H s3w   Y  W d S  tj	yE   Y dS w )NTr   F)
rq   r   r   rI   rQ   rF   async_timeoutrR   asynciorY   r5   r%   r%   r&   can_read_destructive   s   4z(_AsyncHiredisParser.can_read_destructivec                    s>   | j | jI d H }|rt|tsttd | j| dS )NT)	rp   read
_read_sizerf   bytesr   r   rI   rW   )r1   bufferr%   r%   r&   rR      s   
z$_AsyncHiredisParser.read_from_socketFrd   re   returnc                    s   | j s	ttd |r| jd}n| j }|tu r4|  I d H  |r+| jd}n| j }|tu st|tr;|| jd ur\t|| jr\| 	|I d H }|sZ| j
||dI d H S |S t|trn|rnt|d trn|d |S )NFrc   r   )rq   r   r   rI   rQ   rF   rR   rf   r/   rg   rh   ri   rj   r%   r%   r&   rh      s>   




z!_AsyncHiredisParser.read_responserk   )r   r    r!   rl   	__slots__intr2   r,   rO   r4   ru   rR   boolr   r   r   rh   __classcell__r%   r%   ro   r&   rm      s"    	
rm   )%rt   rX   sysloggingr   typingr   r   r   r   r   version_infomajorminorr
   rs   
exceptionsr   r   r   r   utilsr   baser   r   r   r   r   r   r   r   objectrF   r   r(   rm   r%   r%   r%   r&   <module>   s$    
 