o
    ai                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZmZmZ er:d dlmZmZmZ edZG dd	 d	ee ZdS )
    N)datetimetimezone)TYPE_CHECKINGTypeVarGeneric)format_timestamp)EnvelopeItem
PayloadRef)OptionalCallableAnyTc                   @   s   e Zd ZdZdZdZdZdZ							
d%ddZd	e	fddZ
d&ddZd'ddZd&ddZd&ddZd(ddZd)ddZd'd d!Zed*d#d$Zd
S )+Batcherd   i  g      @ capture_funcCallable[[Envelope], None]record_lost_funcCallable[..., None]returnNc                 C   sF   g | _ || _|| _d| _t | _t | _t	 | _
d | _d | _d S NT)_buffer_capture_func_record_lost_func_running	threadingLock_locklocal_activeEvent_flush_event_flusher_flusher_pid)selfr   r    r&   Q/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/sentry_sdk/_batcher.py__init__   s   



zBatcher.__init__c              	   C   s   | j sdS t }| j|krdS | jA | j|kr"	 W d   dS || _tj| jd| _d| j_	z| j
  W n tyK   d| _ Y W d   dS w W d   dS 1 sWw   Y  dS )zFor forking processes we might need to restart this thread.
        This ensures that our process actually has that thread running.
        FTN)target)r   osgetpidr$   r   r   Thread_flush_loopr#   daemonstartRuntimeError)r%   pidr&   r&   r'   _ensure_thread)   s0   


zBatcher._ensure_threadc                 C   sD   d| j _| jr | j| jt   | j  |   | jsd S d S r   )	r    flagr   r"   waitFLUSH_WAIT_TIMErandomclear_flushr%   r&   r&   r'   r-   I   s   
zBatcher._flush_loopitemr   c                 C   s   t | jddr	d S d| j_z_|  r| jd u rW d| j_d S | j6 t| j| jkr=| 	| 	 W d    W d| j_d S | j
| t| j| jkrP| j  W d    n1 sZw   Y  W d| j_d S W d| j_d S d| j_w Nr3   FT)getattrr    r3   r2   r#   r   lenr   MAX_BEFORE_DROP_record_lostappendMAX_BEFORE_FLUSHr"   setr%   r:   r&   r&   r'   addT   s*   
	
		zBatcher.addc                 C   s(   | j d u rd S d| _| j  d | _ d S )NF)r#   r   r"   rB   r9   r&   r&   r'   killm   s
   


zBatcher.killc                 C   s8   t | jdd}d| j_z|   W || j_d S || j_w r;   )r<   r    r3   r8   )r%   
was_activer&   r&   r'   flushu   s
   
zBatcher.flushenveloper   c                    sB   | t j jdt jitd fdd jD idd d S )N
item_countitemsc                    s   g | ]}  |qS r&   )_to_transport_format).0r:   r9   r&   r'   
<listcomp>   s    
z,Batcher._add_to_envelope.<locals>.<listcomp>)json)typecontent_typeheaderspayload)add_itemr	   TYPECONTENT_TYPEr=   r   r
   r%   rH   r&   r9   r'   _add_to_envelope}   s   
zBatcher._add_to_envelopeOptional[Envelope]c                 C   s   t dtttjid}| j" t| jdkr!	 W d    d S | 	| | j
  W d    n1 s5w   Y  | | |S )Nsent_at)rQ   r   )r   r   r   nowr   utcr   r=   r   rW   r7   r   rV   r&   r&   r'   r8      s   

zBatcher._flushc                 C      d S Nr&   rC   r&   r&   r'   r?      s   zBatcher._record_lostr   c                 C   r\   r]   r&   )r:   r&   r&   r'   rK      s   zBatcher._to_transport_format)r   r   r   r   r   N)r   N)r:   r   r   N)rH   r   r   N)r   rX   )r:   r   r   r   )__name__
__module____qualname__rA   r>   r5   rT   rU   r(   boolr2   r-   rD   rE   rG   rW   r8   r?   staticmethodrK   r&   r&   r&   r'   r      s.    

 





r   )r*   r6   r   r   r   typingr   r   r   sentry_sdk.utilsr   sentry_sdk.enveloper   r	   r
   r   r   r   r   r   r&   r&   r&   r'   <module>   s    