
    ph                     T   S SK r S SKrS SKrS SKJr  S SKJrJr  SSKJrJ	r	  SSK
Jr  \\ R                  0r\(       a@  S SKr\" \S5      (       a  S\\R"                  '   S\\R$                  '   OS\\R&                  '   \" \R+                  5       5      rSr\" 5       rS	r " S
 S5      rg)    N)SEEK_END)OptionalUnion   )ConnectionErrorTimeoutError)SSL_AVAILABLESSLWantReadErrorzConnection closed by server.s   
c            	           \ rS rSrS\R                  S\S\4S jrS\4S jrS\	S	4S
\
\   S\\\4   S\
\   S\4S jjrS\S\4S jrS
\S\4S jrS\4S jrS\4S jrS\SS4S jrSS jrSS jrSrg)SocketBuffer   socketsocket_read_sizesocket_timeoutc                 \    Xl         X l        X0l        [        R                  " 5       U l        g N)_sockr   r   ioBytesIO_buffer)selfr   r   r   s       O/home/james-whalen/.local/lib/python3.13/site-packages/redis/_parsers/socket.py__init__SocketBuffer.__init__   s"     
 0,zz|    returnc                     U R                   R                  5       nU R                   R                  S[        5      nU R                   R                  U5        X!-
  $ )z#
Remaining unread length of buffer
r   )r   tellseekr   )r   posends      r   unread_bytesSocketBuffer.unread_bytes&   sF     ll!ll8,#yr   NTlengthtimeoutraise_on_timeoutc                    U R                   nU R                  nSnU[        LnU R                  nUR	                  5       n	UR                  S[        5        U(       a  UR                  U5          U R                   R                  U5      n
[        U
[        5      (       a  [        U
5      S:X  a  [        [        5      eUR                  U
5        [        U
5      nXk-  nUb  X:  a  My   UR                  U	5        U(       a  UR                  U R                  5        gg! [         R"                   aI    U(       a  [%        S5      e UR                  U	5        U(       a  UR                  U R                  5        gg[&         a  n[(        R+                  UR,                  S5      nU(       dI  UR.                  U:X  a9   S nAUR                  U	5        U(       a  UR                  U R                  5        gg[        SUR0                   35      eS nAff = f! UR                  U	5        U(       a  UR                  U R                  5        f f = f)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_socketSocketBuffer._read_from_socket/   s    zz00 0llhhjHOOG$	5zz'78dE**s4yA~)*HII		$!$i%%&/ HH[! 3 34  ~~ 	"#@AA HH[! 3 34  & 	Q
 :==bllBOG#G(; HH[! 3 34  "$EbggY"OPP	Q HH[! 3 34 s=   .A9D &HH 9	H7H
9H 2H

HH 6Ic                 b    [        U R                  5       5      =(       d    U R                  USS9$ )NF)r%   r&   )boolr"   r@   )r   r%   s     r   can_readSocketBuffer.can_read^   s5    D%%'( 
D,B,Be -C -
 	
r   c                     US-   nU R                   R                  U5      nU[        U5      -
  nU(       a.  U R                  U5        X R                   R                  U5      -  nUS S $ )Nr   )r   readr.   r@   )r   r$   r<   missings       r   rH   SocketBuffer.readc   sa    !||  (3t9$""7+LL%%g..DCRyr   c                     U R                   nUR                  5       nUR                  [        5      (       d>  U R	                  5         X!R                  5       -  nUR                  [        5      (       d  M>  US S $ )NrG   )r   readlineendswithSYM_CRLFr@   )r   r:   r<   s      r   rL   SocketBuffer.readlinen   s^    ll||~--))""$LLN"D --))
 CRyr   c                 6    U R                   R                  5       $ )z
Get current read position
)r   r   r   s    r   get_posSocketBuffer.get_posx   s     ||  ""r   r    c                 :    U R                   R                  U5        g)z?
Rewind the buffer to a specific position, to re-start reading
N)r   r   )r   r    s     r   rewindSocketBuffer.rewind~   s     	#r   c                     U R                  5       nUS:  a  gUS:  a"  U R                  R                  5       nX!* S USU& U R                  R                  U5        U R                  R	                  S5        g)z8
After a successful read, purge the read part of buffer
r   N)r"   r   	getbuffertruncater   )r   unreadviews      r   purgeSocketBuffer.purge   sl     ""$
 A:A:<<))+D ND&Mf%!r   c                 v     U R                   R                  5         S U l         S U l        g ! [         a     Nf = fr   )r   close	Exceptionr   rQ   s    r   r_   SocketBuffer.close   s=    	LL  
  	 	s   + 
88)r   r   r   r   )r   N)__name__
__module____qualname____firstlineno__r   intfloatr   r"   r)   r   r   objectrC   r@   rD   r-   rH   rL   rR   rU   r\   r_   __static_attributes__ r   r   r   r      s    $mm$7:$LQ$c  !%(0+/	-5-5 uf}%-5 #4.	-5
 
-5^
 
$ 

	3 	5 	% # ## $ &r   r   )r5   r   r   r   typingr   r   
exceptionsr   r   utilsr	   BlockingIOErrorEWOULDBLOCKr2   sslhasattrr
   SSLWantWriteErrorSSLErrortuplekeysr1   r/   rh   r)   rN   r   rj   r   r   <module>rv      s     	   " 6 !'68I8I&J #s&''DE+C,@,@AEF+C,A,AB<=+CLL9BGGIJ !? 8E Er   