
    `i                         d dl Z d dlZd dlmZmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ erd dlmZ d dlmZ d d	lmZ  e       Z G d
 d      Zy)    N)sleeptime)Queue	FullError)logger)DEFAULT_QUEUE_SIZE)TYPE_CHECKING)Any)Optional)Callablec                       e Zd ZefdeddfdZedefd       ZddZ	de
defdZdd	Zdd
Zdde
ddddfdZdefdZde
ddddfdZdddefdZddZy)BackgroundWorker
queue_sizereturnNc                 r    t        |      | _        t        j                         | _        d | _        d | _        y N)r   _queue	threadingLock_lock_thread_thread_for_pid)selfr   s     O/opt/aeropuerto/back/api/venv/lib/python3.12/site-packages/sentry_sdk/worker.py__init__zBackgroundWorker.__init__   s+    $Z0^^%
5904    c                     | j                   t        j                         k7  ry| j                  sy| j                  j	                         S )NF)r   osgetpidr   is_aliver   s    r   r    zBackgroundWorker.is_alive   s6    299;.||||$$&&r   c                 >    | j                   s| j                          y y r   )r    startr!   s    r   _ensure_threadzBackgroundWorker._ensure_thread#   s    }}JJL r   timeoutc                    t               |z   }| j                  }|j                  j                          	 |j                  rW|t               z
  }|dk  r	 |j                  j                          y|j                  j                  |       |j                  rW	 |j                  j                          y# |j                  j                          w xY w)Nr   F)r%   T)r   r   all_tasks_doneacquireunfinished_tasksreleasewait)r   r%   deadlinequeuedelays        r   _timed_queue_joinz"BackgroundWorker._timed_queue_join'   s    6G#$$&		+(( 46)A: 
   ((*	 $$))%)8	 ((   ((*E  ((*s   B4 /(B4 4Cc                 `   | j                   5  | j                  skt        j                  | j                  d      | _        d| j
                  _        	 | j
                  j                          t        j                         | _
        d d d        y # t        $ r
 d | _        Y w xY w# 1 sw Y   y xY w)Nzsentry-sdk.BackgroundWorker)targetnameT)r   r    r   Thread_targetr   daemonr#   r   r   r   RuntimeErrorr!   s    r   r#   zBackgroundWorker.start8   s    ZZ 	(==(//<<.K  '+#(LL&&(+-99;D(	( 	( $ ( $(DL	(	( 	(s*   AB$3BB!B$ B!!B$$B-c                 ,   t        j                  d       | j                  5  | j                  r.	 | j                  j                  t               d| _        d| _        ddd       y# t        $ r t        j                  d       Y 7w xY w# 1 sw Y   yxY w)z
        Kill worker thread. Returns immediately. Not useful for
        waiting on shutdown for events, use `flush` for that.
        z"background worker got kill requestz)background worker queue full, kill failedN)	r   debugr   r   r   
put_nowait_TERMINATORr   r   r!   s    r   killzBackgroundWorker.killH   s    
 	9:ZZ 	,||NKK**;7  $'+$	, 	, ! NLL!LMN		, 	,s.   B
A&B
&BB
BB

BcallbackzOptional[Any]c                     t        j                  d       | j                  5  | j                  r|dkD  r| j	                  ||       d d d        t        j                  d       y # 1 sw Y   xY w)Nz#background worker got flush requestg        zbackground worker flushed)r   r8   r   r    _wait_flush)r   r%   r<   s      r   flushzBackgroundWorker.flushX   sW    :;ZZ 	4}}3  (3	4 	01	4 	4s   $A$$A-c                 6    | j                   j                         S r   )r   fullr!   s    r   rA   zBackgroundWorker.full_   s    {{!!r   c                 L   t        d|      }| j                  |      s| j                  j                         dz   }t	        j
                  d|       |	 |||       | j                  ||z
        s4| j                  j                         dz   }t	        j                  d|       y y y )Ng?   z%d event(s) pending on flushz"flush timed out, dropped %s events)minr/   r   qsizer   r8   error)r   r%   r<   initial_timeoutpendings        r   r>   zBackgroundWorker._wait_flushb   s    c7+%%o6kk'')A-GLL7A#'*))'O*CD++++-1A7K E 7r   zCallable[[], None]c                 z    | j                          	 | j                  j                  |       y# t        $ r Y yw xY w)NTF)r$   r   r9   r   r   r<   s     r   submitzBackgroundWorker.submitn   s:    	KK""8, 		s   . 	::c                 h   	 | j                   j                         }	 |t        u r	 | j                   j                          y 	  |        | j                   j                          t        d       m# t        $ r t        j                  dd       Y Hw xY w# | j                   j                          w xY w)NTzFailed processing job)exc_infor   )r   getr:   	task_done	Exceptionr   rF   r   rJ   s     r   r4   zBackgroundWorker._targetv   s    {{(H({* %%'IJ %%'!H  ! ILL!84HI %%'s)   B A/ / BB BB B1)r   Nr   )__name__
__module____qualname__r   intr   propertyboolr    r$   floatr/   r#   r;   r?   rA   r>   rK   r4    r   r   r   r      s    ); 53 5 5 '$ ' '+ +4 +"( , 2U 2o 2 2"d "
L5 
LO 
L 
L3  r   r   )r   r   r   r   sentry_sdk._queuer   r   sentry_sdk.utilsr   sentry_sdk.constsr   typingr	   r
   r   r   objectr:   r   rX   r   r   <module>r^      s;    	   . # 0   hn nr   