
    j                         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	ee         Zy)
    N)datetimetimezone)TYPE_CHECKINGTypeVarGeneric)format_timestamp)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                         | _        t	        j                         | _
        d | _        d | _        y NT)_buffer_capture_func_record_lost_func_running	threadingLock_locklocal_activeEvent_flush_event_flusher_flusher_pid)selfcapture_funcrecord_lost_funcs      l/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/sentry_sdk/_batcher.py__init__zBatcher.__init__   s\    
 #%)!1^^%
*3//*;/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'	 Z !$D%,,D4D4DEDM#'DMM ##% &     !&# Z & s/   C=CB::C
CCCC!c                 "   d| j                   _        | j                  rr| j                  j	                  | j
                  t        j                         z          | j                  j                          | j                          | j                  rqy y r   )	r   flagr   r!   waitFLUSH_WAIT_TIMErandomclear_flushr$   s    r'   r/   zBatcher._flush_loopI   s`    
 !mm""4#7#7&--/#IJ##%KKM mmr)   c                    t        | j                  dd      ry d| j                  _        	 | j                         r| j                  	 d| j                  _        y | j
                  5  t        | j                        | j                  k\  r,| j                  |       	 d d d        d| j                  _        y | j                  j                  |       t        | j                        | j                  k\  r| j                  j                          d d d        d| j                  _        y # 1 sw Y   xY w# d| j                  _        w xY wNr6   FT)getattrr   r6   r4   r"   r   lenr   MAX_BEFORE_DROP_record_lostappendMAX_BEFORE_FLUSHr!   setr$   items     r'   addzBatcher.addT   s     4<</ 	&&&(DMM,A !&DLL t||$(<(<<%%d+  !&DLL	 ##D)t||$(=(==%%))+  !&DLL  !&DLLs6   D2 D2 &5D&D2 5AD&D2 &D/+D2 2Ec                 n    | j                   y d| _        | j                  j                          d | _         y )NF)r"   r   r!   rE   r<   s    r'   killzBatcher.killm   s/    == r)   c                     t        | j                  dd      }d| j                  _        	 | j                          || j                  _        y # || j                  _        w xY wr>   )r?   r   r6   r;   )r$   
was_actives     r'   flushzBatcher.flushu   sG    T\\659
 	+KKM *DLL
DLLs   A A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$   enveloperG   s      r'   _add_to_envelopezBatcher._add_to_envelope}   sx    YY!.. #dll"3 #HL"HTD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)rT   r   )r	   r   r   nowr   utcr   r@   r   r[   r:   r   )r$   rZ   s     r'   r;   zBatcher._flush   s     0hll1K LM
 ZZ4<< A% Z !!(+LL   	8$ Zs   B.(+B..B7c                      y N rF   s     r'   rB   zBatcher._record_lost   s    r)   c                      y ra   rb   )rG   s    r'   rY   zBatcher._to_transport_format   s    r)   )r%   zCallable[[Envelope], None]r&   zCallable[..., None]r   N)r   N)rG   r   r   N)rZ   r	   r   N)r   zOptional[Envelope])rG   r   r   r   )__name__
__module____qualname__rD   rA   r8   rW   rX   r(   boolr4   r/   rH   rJ   rM   r[   r;   rB   staticmethodrY   rb   r)   r'   r   r      s    OODL222 02 
	2" @	&2+
$  r)   r   )r,   r9   r   r   r   typingr   r   r   sentry_sdk.utilsr   sentry_sdk.enveloper	   r
   r   r   r   r   r   r   rb   r)   r'   <module>rl      sD    	   ' 2 2 - : :..CLRgaj Rr)   