o
    rPfg                     @   s   d dl Z d dlZd dlZd dlmZ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 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 ddlmZmZmZmZ G dd deddZG dd deZG dd deZdS )    N)CallableListOptionalUnion      )timeout)	TypedDict   )ConnectionErrorInvalidResponse
RedisError)
EncodableT)HIREDIS_AVAILABLE   )AsyncBaseParser
BaseParser)#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"   W/var/www/html/humari/django-venv/lib/python3.10/site-packages/redis/_parsers/hiredis.pyr      s
   
 r   F)totalc                   @   sP   e Zd Z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   s    t std|| _t|| _d S )NzHiredis is not installed)r   r   socket_read_size	bytearray_buffer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    r*   r"   r"   r#   __del__)   s
   z_HiredisParser.__del__c                 K   sZ   dd l }|j| _|j| _t| j|jjd}|jjr|jj	|d< |j
di || _d| _d S )Nr   )r   r   r   r   Fr"   )hiredis_socksocket_timeout_socket_timeoutr   parse_errorencoderencoding_errorsdecode_responsesr   Reader_reader_next_response)r*   
connectionkwargsr/   r"   r"   r#   
on_connect/   s   
z_HiredisParser.on_connectc                 C   s   d | _ d | _d| _d S NF)r0   r8   r9   r-   r"   r"   r#   r,   ?   s   
z_HiredisParser.on_disconnectc                 C   s@   | j stt| jdu r| j  | _| jdu r| j|ddS dS )NF)r   raise_on_timeoutT)r8   r   r   r9   getsread_from_socket)r*   r   r"   r"   r#   can_readD   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: )r0   r   
settimeout	recv_intor(   r   r   r8   feedr2   socketr   TimeoutErrorr   r   get	__class__errnoargs)r*   r   r>   sockcustom_timeoutbufflenexallowedr"   r"   r#   r@   N   sB   

z_HiredisParser.read_from_socketFc                 C   s   | j stt| jdur| j}d| _|S |r| j d}n| j  }|du r<|   |r3| j d}n| j  }|du s&t|trC|t|trU|rUt|d trU|d |S NFr   )r8   r   r   r9   r?   r@   
isinstancelistr*   disable_decodingresponser"   r"   r#   read_responsel   s2   



	z_HiredisParser.read_responseNF)r   r   r   __doc__r+   r.   r<   r,   rA   r   r@   rW   r"   r"   r"   r#   r%       s    
r%   c                       sl   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edeeee f fddZ  ZS )_AsyncHiredisParserzBAsync implementation of parser class for connections using Hiredis)r8   r&   c                    s$   t stdt j|d d | _d S )NzHiredis is not available.)r&   )r   r   superr+   r8   r)   rI   r"   r#   r+      s   
z_AsyncHiredisParser.__init__c                 C   sX   dd l }|j| _t| jd}|jjr|jj|d< |jj|d< |j	di || _d| _
d S )Nr   )r   r   r   r   Tr"   )r/   r8   _streamr   r3   r4   r6   r   r5   r7   
_connected)r*   r:   r/   r;   r"   r"   r#   r<      s   
z_AsyncHiredisParser.on_connectc                 C   s
   d| _ d S r=   )r^   r-   r"   r"   r#   r,      s   
z!_AsyncHiredisParser.on_disconnectc              	      s   | j stt| j rdS z)td4 I d H  |  I d H W  d   I d H  W S 1 I d H s1w   Y  W d S  tjyC   Y dS w )NTr   F)	r^   r   r   r8   r?   async_timeoutr@   asynciorG   r-   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)	r]   read
_read_sizerR   bytesr   r   r8   rE   )r*   bufferr"   r"   r#   r@      s   
z$_AsyncHiredisParser.read_from_socketFrU   returnc                    s   | j s	ttd |r| jd}n| j }|du r4|  I d H  |r+| jd}n| j }|du st|tr;|t|trM|rMt|d trM|d |S rQ   )r^   r   r   r8   r?   r@   rR   rS   rT   r"   r"   r#   rW      s,   




z!_AsyncHiredisParser.read_responserX   )r   r   r   rY   	__slots__intr+   r<   r,   ra   r@   boolr   r   r   rW   __classcell__r"   r"   r\   r#   rZ      s    
rZ   ) r`   rF   systypingr   r   r   r   version_infomajorminorr   r_   redis.compatr	   
exceptionsr   r   r   r   utilsr   baser   r   r   r   r   r   r   r%   rZ   r"   r"   r"   r#   <module>   s     o