
    /
i                     :   d dl Z d dlZd dlZd dlmZ d dlmZmZ ddlmZm	Z	 ddl
mZ ee j        iZer/d dlZ eed          rdeej        <   deej        <   n
deej        <    ee                                          ZdZ e            Zd	Z G d
 d          ZdS )    N)SEEK_END)OptionalUnion   )ConnectionErrorTimeoutError)SSL_AVAILABLESSLWantReadErrorzConnection closed by server.s   
c            	           e Zd Zdej        dedefdZdefdZdedfd	e	e         d
e
eef         de	e         defdZd
edefdZd	edefdZdefdZdefdZdeddfdZddZddZdS )SocketBuffersocketsocket_read_sizesocket_timeoutc                 `    || _         || _        || _        t          j                    | _        d S N)_sockr   r   ioBytesIO_buffer)selfr   r   r   s       C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\redis/_parsers/socket.py__init__zSocketBuffer.__init__   s,     
 0,z||    returnc                     | j                                         }| j                             dt                    }| j                             |           ||z
  S )z3
        Remaining unread length of buffer
        r   )r   tellseekr   )r   posends      r   unread_byteszSocketBuffer.unread_bytes&   sN     l!!l8,,#Syr   NTlengthtimeoutraise_on_timeoutc                 z   | j         }| j        }d}|t          u}| j        }|                                }	|                    dt                     |r|                    |           	 	 |                    |          }
t          |
t                    r't          |
          dk    rt          t                    |                    |
           t          |
          }||z  }|||k    r	 |                    |	           |r|                    | j                   dS dS # t           j        $ rH |rt%          d          Y |                    |	           |r|                    | j                   dS dS t&          $ r}t(                              |j        d          }|sD|j        |k    r9Y d }~|                    |	           |r|                    | j                   dS dS t          d|j                   d }~ww xY w# |                    |	           |r|                    | j                   w w xY w)Nr   TzTimeout reading from socketFz!Error while reading from socket: )r   r   SENTINELr   r   r   r   
settimeoutrecv
isinstancebyteslenr   SERVER_CLOSED_CONNECTION_ERRORwriter   r   r"   r   NONBLOCKING_EXCEPTIONS#NONBLOCKING_EXCEPTION_ERROR_NUMBERSget	__class__errnoargs)r   r!   r"   r#   sockr   markercustom_timeoutbufcurrent_posdatadata_lengthexalloweds                 r   _read_from_socketzSocketBuffer._read_from_socket/   s    z0 0lhhjjH 	%OOG$$$	5yy!122dE** Js4yyA~~)*HIII		$!$ii+%%&6// HH[!!! 5 3444445 5 ~ 	 	 	 B"#@AAA HH[!!! 5 3444445 5 & 	Q 	Q 	Q
 :==blBOOG# G(;(;uuu HH[!!! 5 3444445 5 ""Obg"O"OPPP	Q HH[!!! 5 344445s=   (BD" " HH 8	H-G>.H 'G>>HH 4H:c                 r    t          |                                           p|                     |d          S )NF)r"   r#   )boolr    r=   )r   r"   s     r   can_readzSocketBuffer.can_read^   s@    D%%''(( 
D,B,Be -C -
 -
 	
r   c                     |dz   }| j                             |          }|t          |          z
  }|r2|                     |           || j                             |          z  }|d d         S )Nr   )r   readr+   r=   )r   r!   r9   missings       r   rC   zSocketBuffer.readc   st    !|  ((3t99$ 	/""7+++DL%%g...DCRCyr   c                 
   | j         }|                                }|                    t                    sE|                                  ||                                z  }|                    t                    E|d d         S )NrB   )r   readlineendswithSYM_CRLFr=   )r   r7   r9   s      r   rF   zSocketBuffer.readlinen   st    l||~~--)) 	#""$$$CLLNN"D --)) 	#
 CRCyr   c                 4    | j                                         S )z+
        Get current read position
        )r   r   r   s    r   get_poszSocketBuffer.get_posx   s     |  """r   r   c                 :    | j                             |           dS )zO
        Rewind the buffer to a specific position, to re-start reading
        N)r   r   )r   r   s     r   rewindzSocketBuffer.rewind~   s      	#r   c                    |                                  }|dk    rdS |dk    r)| j                                        }|| d         |d|<   | j                            |           | j                            d           dS )zH
        After a successful read, purge the read part of buffer
        r   N)r    r   	getbuffertruncater   )r   unreadviews      r   purgezSocketBuffer.purge   s     ""$$
 A::FA::<))++D &ND&Mf%%%!r   c                 x    	 | j                                          n# t          $ r Y nw xY wd | _         d | _        d S r   )r   close	Exceptionr   rJ   s    r   rU   zSocketBuffer.close   sT    	L     	 	 	 D	 


s    
)))r   N)__name__
__module____qualname__r   intfloatr   r    r&   r   r   objectr?   r=   r@   r*   rC   rF   rK   rM   rS   rU    r   r   r   r      s}       $m$7:$LQ$ $ $ $c     !%(0+/	-5 -5-5 uf}%-5 #4.	-5
 
-5 -5 -5 -5^
 
$ 
 
 
 

	3 	5 	 	 	 	%    # # # # ## $       &     r   r   )r2   r   r   r   typingr   r   
exceptionsr   r   utilsr	   BlockingIOErrorEWOULDBLOCKr/   sslhasattrr
   SSLWantWriteErrorSSLErrortuplekeysr.   r,   r\   r&   rH   r   r]   r   r   <module>ri      sC    				        " " " " " " " " 6 6 6 6 6 6 6 6 ! ! ! ! ! !'68I&J # >JJJws&'' >DE+C,@AEF+C,ABB<=+CL9BGGIIJJ !? 688E E E E E E E E E Er   