
    `i                         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
mZ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	ee         Zy)
    N)datetimetimezone)TYPE_CHECKINGTypeVarGeneric)format_timestamp	safe_reprserialize_attribute)EnvelopeItem
PayloadRef)OptionalCallableAnyTc                       e Zd ZdZdZdZdZdZ	 	 	 	 	 	 ddZde	fdZ
dd	Zdd
ZddZddZddZddZddZedd       Zy)Batcherd   i  g      @ returnNc                     g | _         || _        || _        d| _        t	        j
                         | _        t	        j                         | _        d | _	        d | _
        y )NT)_buffer_capture_func_record_lost_func_running	threadingLock_lockEvent_flush_event_flusher_flusher_pid)selfcapture_funcrecord_lost_funcs      Q/opt/aeropuerto/back/api/venv/lib/python3.12/site-packages/sentry_sdk/_batcher.py__init__zBatcher.__init__   sN    
 #%)!1^^%
/8/@6:-1    c                    | j                   syt        j                         }| j                  |k(  ry| j                  5  | j                  |k(  r
	 ddd       y|| _        t        j                  | j                        | _        d| j                  _	        	 | j                  j                          	 ddd       y# t        $ r d| _         Y ddd       yw xY w# 1 sw Y   yxY w)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#   pids     r&   _ensure_threadzBatcher._ensure_thread(   s     }}iik#ZZ 	   C'		 	 !$D%,,D4D4DEDM#'DMM ##%	&     !&#	 		& s/   C=CB::C
CCCC!c                     | j                   rr| j                  j                  | j                  t	        j                         z          | j                  j                          | j                          | j                   rqy y N)r   r    waitFLUSH_WAIT_TIMErandomclear_flushr#   s    r&   r.   zBatcher._flush_loopH   sR    mm""4#7#7&--/#IJ##%KKM mmr(   c                    | j                         r| j                  y | j                  5  t        | j                        | j
                  k\  r| j                  |       	 d d d        y | j                  j                  |       t        | j                        | j                  k\  r| j                  j                          d d d        y # 1 sw Y   y xY wr5   )r3   r!   r   lenr   MAX_BEFORE_DROP_record_lostappendMAX_BEFORE_FLUSHr    setr#   items     r&   addzBatcher.addN   s    ""$(=ZZ 	(4<< D$8$88!!$'	( 	(
 LL%4<< D$9$99!!%%'	( 	( 	(s   5C(ACCc                 n    | j                   y d| _        | j                  j                          d | _         y )NF)r!   r   r    rB   r;   s    r&   killzBatcher.kill[   s/    == r(   c                 $    | j                          y r5   )r:   r;   s    r&   flushzBatcher.flushc   s    r(   c                    |j                  t        | j                  | j                  dt	        | j
                        it        d| j
                  D cg c]  }| j                  |       c}i                   y c c}w )N
item_countitems)json)typecontent_typeheaderspayload)add_itemr   TYPECONTENT_TYPEr=   r   r   _to_transport_format)r#   enveloperD   s      r&   _add_to_envelopezBatcher._add_to_envelopef   st    YY!.. #dll"3 #HL"@DD55d;"	
"s   A<c                 t   t        dt        t        j                  t        j
                              i      }| j                  5  t        | j                        dk(  r
	 d d d        y | j                  |       | j                  j                          d d d        | j                  |       |S # 1 sw Y   xY w)Nsent_at)rP   r   )r   r   r   nowr   utcr   r=   r   rW   r9   r   )r#   rV   s     r&   r:   zBatcher._flushx   s     0hll1K LM
 ZZ 	!4<< A%	! 	! !!(+LL 	! 	8$	! 	!s   B.(+B..B7c                      y r5    rC   s     r&   r?   zBatcher._record_lost   s    r(   c                      y r5   r]   )rD   s    r&   rU   zBatcher._to_transport_format   s    r(   )r$   zCallable[[Envelope], None]r%   zCallable[..., None]r   N)r   N)rD   r   r   N)rV   r   r   N)r   zOptional[Envelope])rD   r   r   r   )__name__
__module____qualname__rA   r>   r7   rS   rT   r'   boolr3   r.   rE   rG   rI   rW   r:   r?   staticmethodrU   r]   r(   r&   r   r      s    OODL222 02 
	2  @(
$  r(   r   )r+   r8   r   r   r   typingr   r   r   sentry_sdk.utilsr   r	   r
   sentry_sdk.enveloper   r   r   r   r   r   r   r   r]   r(   r&   <module>rg      sG    	   ' 2 2 M M : :..CL{gaj {r(   