o
    nio(                     @   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   W/home/ubuntu/SoloSpeech/.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U ejed< eed< eed< ded< eed< eed< dZ	d=ddZ
de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d	d
fd d!Zded	d
fd"d#Zd
d
d
d
d
d$d%eej d&eej d'eej d(eej d)eej d	ejfd*d+Zd
d
d
d
d
d$d%eej d&eej d'eej d(eej d)eej d	d
fd,d-Zd>d0d1Z d>d2d3Z!d	ee fd4d5Z"d?d6ee d	ee fd7d8Z#d	eej$ fd9d:Z%	
d?d6ee d	eej fd;d<Z&d
S )@
SockClient_sock_sockid_retry_delayzthreading.Lock_lock_bufsize_buffer   r   Nc                 C   s.   t  j| _d| _t | _d| _t	 | _
d S )Ng?i   )uuiduuid4hexr=   r>   	threadingLockr?   r@   r   rA   r   r   r   r   r   \   s
   
zSockClient.__init__portc                 C   s0   t  t jt j}|d|f || _|   d S )N	localhost)socketAF_INETSOCK_STREAMconnectr<   _detect_bufsize)r   rH   sr   r   r   rM   d   s   zSockClient.connectc                 C   s6   | j tjtj}| j tjtj}t||d| _d S )Ni   )r<   
getsockoptrJ   
SOL_SOCKET	SO_SNDBUF	SO_RCVBUFminr@   )r   sndbuf_sizercvbuf_sizer   r   r   rN   j   s   zSockClient._detect_bufsizec                 C   s   | j   d S r   )r<   closer   r   r   r   rW   o      zSockClient.closevalc                 C   s   | j | d S r   )r<   shutdown)r   rY   r   r   r   rZ   r   r1   zSockClient.shutdownsockc                 C   s   || _ |   d S r   )r<   rN   )r   r[   r   r   r   
set_socketu   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	   rJ   timeoutr>   sleep)r   r2   
total_sent
total_data
start_timesent
delta_timer   r   r   _sendall_with_error_handley   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SerializeToStringr]   structpackordr?   rh   )r   ri   raw_sizer2   headerr   r   r   _send_message   s   "zSockClient._send_messagec                 C   s   |  | d S r   )rs   r   ri   r   r   r   send_server_request   rX   zSockClient.send_server_requestc                 C   s&   z|  | W d S  ty   Y d S w r   )rs   BrokenPipeErrorrt   r   r   r   send_server_response   s
   zSockClient.send_server_responseinform_initinform_startinform_attachinform_finishinform_teardownry   rz   r{   r|   r}   c                C   s4   | j |||||d | jdd}|d u rtd|S )Nrx   r    ra   zNo response after 1 second.)r`   read_server_responser   )r   ry   rz   r{   r|   r}   responser   r   r   send_and_recv   s   	
zSockClient.send_and_recvc                C   sx   t  }|r|j| n(|r|j| n|r|j| n|r(|j| n|r1|j| ntd| 	| d S )N	unmatched)
spbServerRequestry   CopyFromrz   r{   r|   r}   	Exceptionru   )r   ry   rz   r{   r|   r}   
server_reqr   r   r   r`      s   	zSockClient.sendrecord	pb.Recordc                 C   "   t  }|j| | | d S r   )r   r   record_communicater   ru   r   r   r   r   r   r   send_record_communicate      z"SockClient.send_record_communicatec                 C   r   r   )r   r   record_publishr   ru   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   rj   rk   )HEADLENrA   r   r   rn   unpackrp   r0   )r   start_offsetrr   fieldsmagicdlength
end_offsetrec_datar   r   r   _extract_packet_bytes   s   
z SockClient._extract_packet_bytesra   c              	   C   s   	 |   }|r	|S |r| j| z8z	| j| j}W n$ tjy/   Y W |r-| jd dS  ty7   t t	y?   tw W |rI| jd n
|rS| 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recvr@   rJ   ra   ConnectionResetErrorr	   OSErrorr]   rA   r4   )r   ra   recr2   r3   r   r   r   _read_packet_bytes   s<   	zSockClient._read_packet_bytesc                 C   s&   |   }|sd S t }|| |S r   )r   r   r   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 )Nr~   )r   r   ServerResponser   )r   ra   r2   r   r   r   r   r     s   
zSockClient.read_server_responser5   )r   r   r   Nr   )'r   r   r   rJ   r7   strfloatr8   r   r   r   rM   rN   rW   rZ   r\   r6   rh   r   rs   ru   rw   r   r   ServerInformInitRequestServerInformStartRequestServerInformAttachRequestServerInformFinishRequestServerInformTeardownRequestr   r   r`   r   r   r   r   r   r   r   r   r   r   r   r;   Q   s   
 







#	r;   )rJ   rn   rF   r^   rC   typingr   r   r   r   wandb.protor   r   r   pbr   r	   r   r   r;   r   r   r   r   <module>   s    ;