o
    i                     @   s8  U d dl mZ d dlZd dlZd dlmZ d dlZd dlZd dlZd dl	m
Z
 d dlmZ eeZdZG dd dZz d dlZG d	d
 d
eZG dd deZG dd deZe
ZW n eyw   d dlZG dd deZe ZZdd ZY nw zee Zeje ed< W n ey   dZY nw G dd dZdS )    )contextmanagerN)Path)unpatched_open)
get_loggeri    c                   @   sB   e Zd Zdejej fddZdd Zdd Zdd	 Z	d
d Z
dS )BaseLockfilec                 C   s
   || _ d S N)r   )selfr    r
   H/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/ipc.py__init__   s   
zBaseLock.__init__c                 C      d S r   r
   r	   r
   r
   r   acquire       zBaseLock.acquirec                 C   r   r   r
   r   r
   r
   r   release   r   zBaseLock.releasec                 C   s   |    | S r   )r   r   r
   r
   r   	__enter__   s   zBaseLock.__enter__c                 C   s   |    d S r   )r   )r	   exc_type	exc_valueexc_tbr
   r
   r   __exit__   s   zBaseLock.__exit__N)__name__
__module____qualname__typingIOAnyr   r   r   r   r   r
   r
   r
   r   r      s    r   c                   @   s0   e Zd ZU dZeje ed< dd Zdd Z	dS )BaseUnixLockN__acquire_mode__c                 C   s6   | j d u rdt|  d}t|t| j| j  d S )NzCannot use lock of type z	 directly)r   type
ValueErrorfcntllockfr   )r	   msgr
   r
   r   r   +   s   
zBaseUnixLock.acquirec                 C   s   t | jt j d S r   )r!   r"   r   LOCK_UNr   r
   r
   r   r   2   s   zBaseUnixLock.release)
r   r   r   r   r   Optionalint__annotations__r   r   r
   r
   r
   r   r   (   s   
 r   c                   @      e Zd ZejZdS )ReadLockN)r   r   r   r!   LOCK_SHr   r
   r
   r
   r   r)   5       
r)   c                   @   r(   )	WriteLockN)r   r   r   r!   LOCK_EXr   r
   r
   r
   r   r,   8   r+   r,   c                   @   s   e Zd Zdd Zdd ZdS )BaseWinLockc                 C   (   | j }|d t| tjt d S Nr   )r   seekmsvcrtlockingfilenoLK_RLCKMAX_FILE_SIZEr	   fr
   r
   r   r   B      
zBaseWinLock.acquirec                 C   r/   r0   )r   r1   r2   r3   r4   LK_UNLCKr6   r7   r
   r
   r   r   G   r9   zBaseWinLock.releaseN)r   r   r   r   r   r
   r
   r
   r   r.   A   s    r.   c           
   	   C   sn   dd l }d}|j|jB }tjtjB tjB tjB }d}d}d}|| ||d||d}t	
||tjB }	t|	|S )Nr   r+b      i   )_winapiGENERIC_READGENERIC_WRITEosO_RDWRO_CREATO_BINARYO_RANDOM
CreateFiler2   open_osfhandleO_NOINHERITr   )
pathmoder>   flagfd_flagSHARED_READ_WRITEOPEN_ALWAYSRANDOM_ACCESShandlefdr
   r
   r   	open_fileN   s   
rR   TMPDIRc                   @   s   e Zd ZdZddeje ddfddZdejdeddfd	d
Z	deddfddZ
dejdee fddZdee fddZdee fddZdejddfddZdddZedd Zedd ZdS )SharedStringFilezCA simple shared-file implementation for multiprocess communication.Nnamereturnc                 C   sH   t d urtt |ptd nd | _| jd ur"t| jjdd d S d S )N   T)exist_ok)rS   strsecrets	token_hexfilenamer   touch)r	   rU   r
   r
   r   r   f   s
    
zSharedStringFile.__init__r8   datac                 C   s@   | dtj |d  }| t| tkr|| d S d S )Nr    )r1   rA   SEEK_ENDencodetelllenr6   write)r	   r8   r^   dtr
   r
   r   put_unlockedm   s
   zSharedStringFile.put_unlockedc                 C   sb   | j du rdS z|  }| || W d   W dS 1 sw   Y  W dS  ty0   Y dS w )zPut a string into the file.N)r\   lock_exclusiverf   	Exception)r	   r^   r8   r
   r
   r   puts   s   

&zSharedStringFile.putc                 C   s.   | d | d }r| dS g S )Nr       r_   )r1   readstripdecodesplit)r	   r8   r^   r
   r
   r   peekall_unlocked~   s   
$z!SharedStringFile.peekall_unlockedc                 C   s`   | j du rg S z|  }| |W  d   W S 1 sw   Y  W dS  ty/   g  Y S w )z"Peek at all strings from the file.N)r\   lock_sharedro   rh   r7   r
   r
   r   peekall   s   

(zSharedStringFile.peekallc              
   C   sz   | j du rg S z*|  }z| |W | | W  d   W S | | w 1 s*w   Y  W dS  ty<   g  Y S w )z.Retrieve and remove all strings from the file.N)r\   rg   ro   clear_unlockedrh   r7   r
   r
   r   	snatchall   s   



zSharedStringFile.snatchallc                 C   s   | d |  d S r0   )r1   truncater7   r
   r
   r   rr      s   
zSharedStringFile.clear_unlockedc                 C   s`   | j du rdS z|  }| | W d   W dS 1 sw   Y  W dS  ty/   Y dS w )z Clear all strings from the file.N)r\   rg   rr   rh   r7   r
   r
   r   clear   s   

&zSharedStringFile.clearc              	   c   s    | j du rtdV  dS t| j d(}t| |V  W d   n1 s'w   Y  W d   dS W d   dS 1 s?w   Y  dS )z:Context manager to acquire a shared/read lock on the file.N    rb)r\   ioBytesIOrR   r)   r7   r
   r
   r   rp      s   
PzSharedStringFile.lock_sharedc              	   c   s    | j du rtdV  dS t| j d,}t| |V  |  W d   n1 s+w   Y  W d   dS W d   dS 1 sCw   Y  dS )z?Context manager to acquire an exclusive/write lock on the file.Nrv   r;   )r\   rx   ry   rR   r,   flushr7   r
   r
   r   rg      s   

PzSharedStringFile.lock_exclusiver   )rV   N)r   r   r   __doc__r   r%   rY   r   BinaryIOrf   ri   listro   rq   rs   rr   ru   r   rp   rg   r
   r
   r
   r   rT   c   s    


rT   )
contextlibr   rx   rA   pathlibr   rZ   tempfiler   ddtrace.internal._unpatchedr   ddtrace.internal.loggerr   r   logr6   r   r!   r   r)   r,   rR   ModuleNotFoundErrorr2   r.   
gettempdirrS   r%   r'   FileNotFoundErrorrT   r
   r
   r
   r   <module>   s<     