o
    -wi!                      @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZ er.d dl
mZ G dd deZG dd deZG d	d
 d
ZG dd dZdS )    N)TYPE_CHECKINGAnyListOptional)wandb_server_pb2)wandb_internal_pb2c                   @      e Zd ZdZdS )SockClientClosedErrorz(Raised on operations on a closed socket.N__name__
__module____qualname____doc__ r   r   V/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/wandb/sdk/lib/sock_client.pyr	          r	   c                   @   r   )SockClientTimeoutErrorz7Raised if the server didn't respond before the timeout.Nr
   r   r   r   r   r      r   r   c                	   @   s   e Zd ZU ee ed< ee ed< eed< dddZedefdd	Z	ddedede
defddZdededefddZdededefddZdededdfddZdS )
SockBuffer	_buf_list_buf_lengths
_buf_totalreturnNc                 C   s   g | _ g | _d| _d S )Nr   )r   r   r   selfr   r   r   __init__   s   
zSockBuffer.__init__c                 C   s   | j S N)r   r   r   r   r   length    s   zSockBuffer.lengthFstartendpeekc           
      C   s  d }g }|}t t| j| jD ]!\}\}}	|||k r!|	d | n|	 ||kr,|} n||8 }q|d u r9td|s|  j|8  _||k rl| j|d  | _| j|d  | _| jd |d  | jd< | jd  |8  < n| j|d d  | _| j|d d  | _d||| S )NzSockBuffer index out of ranger          )	enumeratezipr   r   append
IndexErrorr   join)
r   r   r   r   indexbuffersneedibuf_lenbuf_datar   r   r   _get$   s*   
zSockBuffer._getc                 C   s   |  ||S r   r-   r   r   r   r   r   r   getE   s   zSockBuffer.getc                 C   s   | j ||ddS )NT)r   r.   r/   r   r   r   r   H      zSockBuffer.peekdatadata_lenc                 C   s*   | j | | j| |  j|7  _d S r   )r   r$   r   r   )r   r2   r3   r   r   r   putK   s   zSockBuffer.putr   N)F)r   r   r   r   bytes__annotations__intr   propertyr   boolr-   r0   r   r4   r   r   r   r   r      s   
 
!r   c                   @   s   e Zd ZdZdejddfddZd)ddZd)d	d
ZdeddfddZ	dejddfddZ
deddfddZdeddfddZdejddfddZdejddfddZd*ddZd*ddZdee fd d!Zd+d"ee dee fd#d$Zdeej fd%d&Z	d+d"ee deej fd'd(ZdS ),
SockClient   sockr   Nc                 C   s<   || _ t j| _d| _t | _d| _	t
 | _|   dS )zRCreate a SockClient.

        Args:
            sock: A connected socket.
        g?i   N)_sockuuiduuid4hex_sockid_retry_delay	threadingLock_lock_bufsizer   _buffer_detect_bufsizer   r=   r   r   r   r   U   s   
zSockClient.__init__c                 C   s6   | j tjtj}| j tjtj}t||d| _d S )Ni   )r>   
getsockoptsocket
SOL_SOCKET	SO_SNDBUF	SO_RCVBUFminrG   )r   sndbuf_sizercvbuf_sizer   r   r   rI   f   s   zSockClient._detect_bufsizec                 C   s   | j   d S r   )r>   closer   r   r   r   rS   k      zSockClient.closevalc                 C   s   | j | d S r   )r>   shutdown)r   rU   r   r   r   rV   n   r1   zSockClient.shutdownc                 C   s   || _ |   d S r   )r>   rI   rJ   r   r   r   
set_socketq   s   zSockClient.set_socketr2   c                 C   s   d}t |}||k rLt }z| j|}|dkrtd||7 }||d  }W n tjyE   t | }|| jk rCt	| j|  Y nw ||k s
d S d S )Nr   zsocket connection broken)
lentime	monotonicr>   sendr	   rL   timeoutrC   sleep)r   r2   
total_sent
total_data
start_timesent
delta_timer   r   r   _sendall_with_error_handleu   s"   
z%SockClient._sendall_with_error_handlemsgc                 C   sp   |  }| }t||ksJ dtdtd|}| j | ||  W d    d S 1 s1w   Y  d S )Nzinvalid serialization<BIW)ByteSizeSerializeToStringrX   structpackordrF   rc   )r   rd   raw_sizer2   headerr   r   r   _send_message   s   "zSockClient._send_messagec                 C   s   |  | d S r   )rn   r   rd   r   r   r   send_server_request   rT   zSockClient.send_server_requestc                 C   s&   z|  | W d S  ty   Y d S w r   )rn   BrokenPipeErrorro   r   r   r   send_server_response   s
   zSockClient.send_server_responserecord	pb.Recordc                 C   ,   t  }|jj|_|j| | | d S r   )spbServerRequestcontrolmailbox_slot
request_idrecord_communicateCopyFromrp   r   rs   
server_reqr   r   r   send_record_communicate      
z"SockClient.send_record_communicatec                 C   ru   r   )rv   rw   rx   ry   rz   record_publishr|   rp   r}   r   r   r   send_record_publish   r   zSockClient.send_record_publishc                 C   sp   | j }| jj|kr6| jd|}td|}|\}}|tdks"J | j | }| jj|kr6| j||}|S d S )Nr   re   rf   )HEADLENrH   r   r   ri   unpackrk   r0   )r   start_offsetrm   fieldsmagicdlength
end_offsetrec_datar   r   r   _extract_packet_bytes   s   
z SockClient._extract_packet_bytesr\   c              
   C   s   	 |   }|r	|S |r| j| z6z	| j| j}W n" tjy/   Y W |r-| jd dS  ty= } zt|d}~ww W |rG| jd n
|rQ| jd w w t	|}|dkr\t| j
|| q)zRead full message from socket.

        Args:
            timeout: number of seconds to wait on socket data.

        Raises:
            SockClientClosedError: socket has been closed.
        TNr   )r   r>   
settimeoutrecvrG   rL   r\   OSErrorr	   rX   rH   r4   )r   r\   recr2   er3   r   r   r   _read_packet_bytes   s:   	zSockClient._read_packet_bytesc                 C   s&   |   }|sd S t }|| |S r   )r   rv   rw   ParseFromString)r   r2   r   r   r   r   read_server_request   s   
zSockClient.read_server_requestc                 C   s*   | j |d}|s
d S t }|| |S )N)r\   )r   rv   ServerResponser   )r   r\   r2   r   r   r   r   read_server_response   s   
zSockClient.read_server_responser5   )rs   rt   r   Nr   )r   r   r   r   rL   r   rI   rS   r8   rV   rW   r6   rc   r   rn   rv   rw   rp   r   rr   r   r   r   r   r   r   r   r   r   r   r   r;   Q   s,    



!	r;   )rL   ri   rD   rY   r?   typingr   r   r   r   wandb.protor   rv   r   pb	Exceptionr	   r   r   r;   r   r   r   r   <module>   s    ;