§
    xÅ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 d dlm	Z	 d dl
mZmZ d dlmZ d dlmZmZ e	r
d dlmZmZmZ  e¦   «         Z G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )é    N)ÚABCÚabstractmethod)ÚsleepÚtime)ÚTYPE_CHECKING)Ú	FullErrorÚQueue)ÚDEFAULT_QUEUE_SIZE)ÚloggerÚmark_sentry_task_internal)ÚAnyÚCallableÚOptionalc                   óª   — e Zd ZdZeedefd„¦   «         ¦   «         Zedd„¦   «         Z	 dde	ddddfd	„Z
edefd
„¦   «         Zedddefd„¦   «         ZdS )ÚWorkerzBase class for all workers.Úreturnc                 ó   — dS )z(Whether the worker is alive and running.N© ©Úselfs    úBC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/worker.pyÚis_alivezWorker.is_alive   s	   € ð 	ˆó    Nc                 ó   — dS )z5Kill the worker. It will not process any more events.Nr   r   s    r   ÚkillzWorker.kill   ó	   € ð 	ˆr   ÚtimeoutÚcallbackz%Optional[Callable[[int, float], Any]]c                 ó   — dS )z<Flush the worker, blocking until done or timeout is reached.Nr   ©r   r   r   s      r   ÚflushzWorker.flush!   s	   € ð ˆtr   c                 ó   — dS )z#Whether the worker's queue is full.Nr   r   s    r   ÚfullzWorker.full'   r   r   úCallable[[], Any]c                 ó   — dS )z;Schedule a callback. Returns True if queued, False if full.Nr   ©r   r   s     r   ÚsubmitzWorker.submit,   r   r   ©r   N©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   Úboolr   r   Úfloatr!   r#   r'   r   r   r   r   r      s÷   € € € € € Ø%Ð%àØð˜$ð ð ð ñ „^ñ „Xðð ðð ð ñ „^ðð
 SWðð ØðØ(Oðà	ðð ð ð ð ð�dð ð ð ñ „^ðð ðÐ2ð °tð ð ð ñ „^ðð ð r   r   c                   ó´   — 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dS )ÚBackgroundWorkerÚ
queue_sizer   Nc                 óz   — t          |¦  «        | _        t          j        ¦   «         | _        d | _        d | _        d S r)   )r	   Ú_queueÚ	threadingÚLockÚ_lockÚ_threadÚ_thread_for_pid©r   r3   s     r   Ú__init__zBackgroundWorker.__init__3   s5   € Ý$ ZÑ0Ô0ˆŒÝ”^Ñ%Ô%ˆŒ
Ø59ˆŒØ04ˆÔÐÐr   c                 ó‚   — | j         t          j        ¦   «         k    rdS | j        sdS | j                             ¦   «         S ©NF)r:   ÚosÚgetpidr9   r   r   s    r   r   zBackgroundWorker.is_alive9   s>   € àÔ¥2¤9¡;¤;Ò.Ð.Ø�5ØŒ|ð 	Ø�5ØŒ|×$Ò$Ñ&Ô&Ð&r   c                 ó@   — | j         s|                      ¦   «          d S d S r)   ©r   Ústartr   s    r   Ú_ensure_threadzBackgroundWorker._ensure_threadA   ó'   € ØŒ}ð 	Ø�JŠJ‰LŒLˆLˆLˆLð	ð 	r   r   c                 ó’  — t          ¦   «         |z   }| j        }|j                             ¦   «          	 |j        rU|t          ¦   «         z
  }|dk    r	 |j                             ¦   «          dS |j                             |¬¦  «         |j        °U	 |j                             ¦   «          dS # |j                             ¦   «          w xY w)Nr   F©r   T)r   r5   Úall_tasks_doneÚacquireÚunfinished_tasksÚreleaseÚwait)r   r   ÚdeadlineÚqueueÚdelays        r   Ú_timed_queue_joinz"BackgroundWorker._timed_queue_joinE   s×   € Ý‘6”6˜GÑ#ˆØ”ˆàÔ×$Ò$Ñ&Ô&Ð&ð		+ØÔ(ð 9Ø ¥4¡6¤6Ñ)�Ø˜A’:�:Ø ð
 Ô ×(Ò(Ñ*Ô*Ð*Ð*Ð*ð	 Ô$×)Ò)°%Ð)Ñ8Ô8Ð8ð	 Ô(ð 9ð àÔ ×(Ò(Ñ*Ô*Ð*Ð*Ð*øˆEÔ ×(Ò(Ñ*Ô*Ð*Ð*øøøs   ³B+ Á-"B+ Â+Cc                 ó@  — | j         5  | j        svt          j        | j        d¬¦  «        | _        d| j        _        	 | j                             ¦   «          t          j	        ¦   «         | _
        n# t          $ r
 d | _        Y nw xY wd d d ¦  «         d S # 1 swxY w Y   d S )Nzsentry-sdk.BackgroundWorker)ÚtargetÚnameT)r8   r   r6   ÚThreadÚ_targetr9   ÚdaemonrC   r?   r@   r:   ÚRuntimeErrorr   s    r   rC   zBackgroundWorker.startV   s÷   € ØŒZð 	(ð 	(Ø”=ð (Ý(Ô/Øœ<Ð.Kð ñ  ô  �”ð '+�”Ô#ð(Ø”L×&Ò&Ñ(Ô(Ð(Ý+-¬9©;¬;�DÔ(Ð(øÝ#ð (ð (ð (ð $(�D”L�L�Lð	(øøøð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(s4   ˆ4B½1A/Á.BÁ/BÂ BÂBÂBÂBÂBc                 ó"  — t          j        d¦  «         | j        5  | j        rS	 | j                             t          ¦  «         n$# t          $ r t          j        d¦  «         Y nw xY wd| _        d| _        ddd¦  «         dS # 1 swxY w Y   dS )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   Údebugr8   r9   r5   Ú
put_nowaitÚ_TERMINATORr   r:   r   s    r   r   zBackgroundWorker.killf   sñ   € õ
 	ŒÐ9Ñ:Ô:Ð:ØŒZð 	,ð 	,ØŒ|ð ,ðNØ”K×*Ò*­;Ñ7Ô7Ð7Ð7øÝ ð Nð Nð NÝ”LÐ!LÑMÔMÐMÐMÐMðNøøøð  $�”Ø'+�Ô$ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð 	,ð 	,s4   œB¥AÁBÁA&Á#BÁ%A&Á&BÂBÂBr   úOptional[Any]c                 óÚ   — t          j        d¦  «         | j        5  | j        r|dk    r|                      ||¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        d¦  «         d S )Nz#background worker got flush requestç        zbackground worker flushed)r   rY   r8   r   Ú_wait_flushr    s      r   r!   zBackgroundWorker.flushv   s±   € ÝŒÐ:Ñ;Ô;Ð;ØŒZð 	4ð 	4ØŒ}ð 4 ¨3¢ Ø× Ò  ¨(Ñ3Ô3Ð3ð	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4õ 	ŒÐ0Ñ1Ô1Ð1Ð1Ð1s   œ$AÁAÁAc                 ó4   — | j                              ¦   «         S r)   ©r5   r#   r   s    r   r#   zBackgroundWorker.full}   s   € ØŒ{×ÒÑ!Ô!Ð!r   c                 óh  — t          d|¦  «        }|                      |¦  «        sŠ| j                             ¦   «         dz   }t	          j        d|¦  «         |� |||¦  «         |                      ||z
  ¦  «        s5| j                             ¦   «         dz   }t	          j        d|¦  «         d S d S d S )Nçš™™™™™¹?é   ú%d event(s) pending on flushú"flush timed out, dropped %s events)ÚminrP   r5   Úqsizer   rY   Úerror)r   r   r   Úinitial_timeoutÚpendings        r   r_   zBackgroundWorker._wait_flush€   sÐ   € Ý˜c 7Ñ+Ô+ˆØ×%Ò% oÑ6Ô6ð 	LØ”k×'Ò'Ñ)Ô)¨AÑ-ˆGÝŒLÐ7¸ÑAÔAÐAØÐ#Ø�˜ 'Ñ*Ô*Ð*à×)Ò)¨'°OÑ*CÑDÔDð LØœ+×+Ò+Ñ-Ô-°Ñ1�Ý”ÐAÀ7ÑKÔKÐKÐKÐKð	Lð 	LðLð Lr   r$   c                 ó†   — |                       ¦   «          	 | j                             |¦  «         dS # t          $ r Y dS w xY w)NTF)rD   r5   rZ   r   r&   s     r   r'   zBackgroundWorker.submitŒ   sV   € Ø×ÒÑÔÐð	ØŒK×"Ò" 8Ñ,Ô,Ð,Ø�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   –2 ²
A ¿A c                 óv  — 	 | j                              ¦   «         }	 |t          u r	 | j                              ¦   «          d S 	  |¦   «          n&# t          $ r t          j        dd¬¦  «         Y nw xY w| j                              ¦   «          n# | j                              ¦   «          w xY wt          d¦  «         Œ¹)NTúFailed processing job©Úexc_infor   )r5   Úgetr[   Ú	task_doneÚ	Exceptionr   ri   r   r&   s     r   rU   zBackgroundWorker._target”   sØ   € ð	Ø”{—’Ñ(Ô(ˆHð(Ø�{Ð*Ð*Øð ”×%Ò%Ñ'Ô'Ð'Ð'Ð'ðIØ�H‘J”J�J�JøÝ ð Ið Ið IÝ”LÐ!8À4ÐHÑHÔHÐHÐHÐHðIøøøð ”×%Ò%Ñ'Ô'Ð'Ð'ø�”×%Ò%Ñ'Ô'Ð'Ð'øøøÝ�!‰HŒHˆHð	s/   œ	B Á
A ÁB Á A0Á-B Á/A0Á0B ÂB(r(   r)   )r*   r+   r,   r
   Úintr<   r.   r/   r   rD   r0   rP   rC   r   r!   r#   r_   r'   rU   r   r   r   r2   r2   2   ss  € € € € € Ø);ð 5ð 5 3ð 5Àð 5ð 5ð 5ð 5ð ð'˜$ð 'ð 'ð 'ñ „Xð'ðð ð ð ð+¨ð +°4ð +ð +ð +ð +ð"(ð (ð (ð (ð ,ð ,ð ,ð ,ð 2ð 2˜Uð 2¨oð 2Èð 2ð 2ð 2ð 2ð"�dð "ð "ð "ð "ð
L 5ð 
L°Oð 
LÈð 
Lð 
Lð 
Lð 
LðÐ2ð °tð ð ð ð ðð ð ð ð ð r   r2   c                   óÈ   — e Zd Zefdeddfd„Zedefd„¦   «         Zdd„Z	dd„Z
defd„Zdd	„Z	 dd
eddddfd„Z	 dd
eddddfd„Zdddefd„Zdd„Zdd„Z	 d	 	 	 	 	 dd„ZdS )ÚAsyncWorkerr3   r   Nc                 ór   — d | _         || _        d | _        d | _        d | _        t          ¦   «         | _        d S r)   )r5   Ú_queue_sizeÚ_taskÚ_task_for_pidÚ_loopÚsetÚ_active_tasksr;   s     r   r<   zAsyncWorker.__init__¤   s9   € Ø6:ˆŒØ%ˆÔØ59ˆŒ
à.2ˆÔØ<@ˆŒ
å8;¹¼ˆÔÐÐr   c                 óÄ   — | j         t          j        ¦   «         k    rdS | j        r| j        sdS | j                             ¦   «         o| j                             ¦   «          S r>   )rz   r?   r@   ry   r{   Ú
is_runningÚdoner   s    r   r   zAsyncWorker.is_alive®   s[   € àÔ¥¤¡¤Ò,Ð,Ø�5ØŒzð 	 ¤ð 	Ø�5ØŒz×$Ò$Ñ&Ô&Ð@¨t¬z¯ªÑ/@Ô/@Ð+@Ð@r   c                 ó   — | j         rv| j                              ¦   «          t          | j        ¦  «        }|D ]}|                     ¦   «          Œ| j                             ¦   «          d | _        d | _         d | _        d S d S r)   )ry   Úcancelr|   r}   Úclearr{   rz   )r   Útasks_to_cancelÚtasks      r   r   zAsyncWorker.kill¶   s‹   € ØŒ:ð 	&àŒJ×ÒÑÔÐõ " $Ô"4Ñ5Ô5ˆOØ'ð ð �Ø—’‘”��ØÔ×$Ò$Ñ&Ô&Ð&ØˆDŒJØˆDŒJØ!%ˆDÔÐÐð	&ð 	&r   c                 óÚ  — | j         sã	 t          j        ¦   «         | _        t          j        | j        ¬¦  «        | _        t          ¦   «         5  | j                             |  	                    ¦   «         ¦  «        | _
        d d d ¦  «         n# 1 swxY w Y   t          j        ¦   «         | _        d S # t          $ r- t          j        d¦  «         d | _        d | _
        d | _        Y d S w xY wd S )N)Úmaxsizez/No event loop running, async worker not started)r   ÚasyncioÚget_running_loopr{   r	   rx   r5   r   Úcreate_taskrU   ry   r?   r@   rz   rW   r   Úwarningr   s    r   rC   zAsyncWorker.startÄ   s2  € ØŒ}ð 	*ð*Ý$Ô5Ñ7Ô7�”
å%œm°DÔ4DÐEÑEÔE�”Ý.Ñ0Ô0ð Hð HØ!%¤×!7Ò!7¸¿º¹¼Ñ!GÔ!G�D”JðHð Hð Hñ Hô Hð Hð Hð Hð Hð Hð Høøøð Hð Hð Hð Hå%'¤Y¡[¤[�Ô"Ð"Ð"øÝð *ð *ð *å”ÐPÑQÔQÐQØ!�”
Ø!�”
Ø%)�Ô"Ð"Ð"Ð"ð*øøøð	*ð 	*s6   ‰AB1 Á2BÂ B1 ÂBÂB1 ÂBÂB1 Â13C(Ã'C(c                 óF   — | j         €dS | j                              ¦   «         S )NTra   r   s    r   r#   zAsyncWorker.fullÔ   s#   € ØŒ;ÐØ�4ØŒ{×ÒÑ!Ô!Ð!r   c                 ó@   — | j         s|                      ¦   «          d S d S r)   rB   r   s    r   Ú_ensure_taskzAsyncWorker._ensure_taskÙ   rE   r   r   r   r\   c              ƒ   óØ  K  — | j         r | j                              ¦   «         r| j        €d S t          d|¦  «        }	 t	          j        | j                             ¦   «         |¬¦  «        ƒ d {V —† d S # t          j        $ rè | j                             ¦   «         t          | j
        ¦  «        z   }t          j        d|¦  «         |� |||¦  «         	 ||z
  }t	          j        | j                             ¦   «         |¬¦  «        ƒ d {V —† Y d S # t          j        $ rH | j                             ¦   «         t          | j
        ¦  «        z   }t          j        d|¦  «         Y Y d S w xY ww xY w)Nrc   rG   re   rf   )r{   r   r5   rg   rˆ   Úwait_forÚjoinÚTimeoutErrorrh   Úlenr}   r   rY   ri   )r   r   r   rj   rk   Úremaining_timeouts         r   r_   zAsyncWorker._wait_flushÝ   s©  è è € ð Œzð 	 ¤×!6Ò!6Ñ!8Ô!8ð 	¸D¼KÐ<OØˆFå˜c 7Ñ+Ô+ˆð	LÝÔ" 4¤;×#3Ò#3Ñ#5Ô#5¸ÐOÑOÔOÐOÐOÐOÐOÐOÐOÐOÐOÐOøÝÔ#ð 	Lð 	Lð 	LØ”k×'Ò'Ñ)Ô)­C°Ô0BÑ,CÔ,CÑCˆGÝŒLÐ7¸ÑAÔAÐAØÐ#Ø�˜ 'Ñ*Ô*Ð*ðLØ$+¨oÑ$=Ð!ÝÔ& t¤{×'7Ò'7Ñ'9Ô'9ÐCTÐUÑUÔUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUøÝÔ'ð Lð Lð LØœ+×+Ò+Ñ-Ô-µ°DÔ4FÑ0GÔ0GÑG�Ý”ÐAÀ7ÑKÔKÐKÐKÐKÐKÐKðLøøøð	Løøøs+   ½3A2 Á2A E)Ã8DÄAE%Å E)Å$E%Å%E)zOptional[asyncio.Task[None]]c                 ó  — | j         rz|dk    rt| j        rm| j                             ¦   «         rTt          ¦   «         5  | j                             |                      ||¦  «        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nr^   )r   r{   r   r   rŠ   r_   r    s      r   r!   zAsyncWorker.flushõ   sÏ   € ð Œ=ð 	S˜W sš]˜]¨t¬z˜]¸d¼j×>SÒ>SÑ>UÔ>U˜]Ý*Ñ,Ô,ð Sð SØ”z×-Ò-¨d×.>Ò.>¸wÈÑ.QÔ.QÑRÔRðSð Sð Sð Sñ Sô Sð Sð Sð Sð Sð Sð Søøøð Sð Sð Sð Sàˆts   ¼.A7Á7A;Á>A;r$   c                 ó¢   — |                       ¦   «          | j        €dS 	 | j                             |¦  «         dS # t          j        $ r Y dS w xY w)NFT)rŽ   r5   rZ   rˆ   Ú	QueueFullr&   s     r   r'   zAsyncWorker.submitý   sf   € Ø×ÒÑÔÐØŒ;ÐØ�5ð	ØŒK×"Ò" 8Ñ,Ô,Ð,Ø�4øÝÔ ð 	ð 	ð 	Ø�5�5ð	øøøs   Ÿ; »AÁAc              ƒ   ó  ‡ ‡K  — ‰ j         €d S 	 	 ‰ j                              ¦   «         ƒ d {V —†}|t          u r‰ j                              ¦   «          d S t	          ¦   «         5  t          j        ‰                      |¦  «        ¦  «        }d d d ¦  «         n# 1 swxY w Y   ‰ j         	                    |¦  «         ‰ j         Š| 
                    ˆˆ fd„¦  «         t          j        d¦  «        ƒ d {V —† Œå# t
          j        $ r Y d S w xY w)NTc                 ó0   •— ‰                      | ‰¦  «        S r)   )Ú_on_task_complete)ÚtÚ	queue_refr   s    €€r   ú<lambda>z%AsyncWorker._target.<locals>.<lambda>  s   ø€ °×1GÒ1GÈÈ9Ñ1UÔ1U€ r   r   )r5   rq   r[   rr   r   rˆ   rŠ   Ú_process_callbackr}   ÚaddÚadd_done_callbackr   ÚCancelledError)r   r   r…   rœ   s   `  @r   rU   zAsyncWorker._target  s‡  øøè è € ØŒ;ÐØˆFð	ð'Ø!%¤§¢Ñ!2Ô!2Ð2Ð2Ð2Ð2Ð2Ð2�Ø�{Ð*Ð*Ø”K×)Ò)Ñ+Ô+Ð+Ø�Eå.Ñ0Ô0ð Qð QÝ"Ô.¨t×/EÒ/EÀhÑ/OÔ/OÑPÔP�DðQð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qð Ô"×&Ò& tÑ,Ô,Ð,ð !œK�	Ø×&Ò&Ð'UÐ'UÐ'UÐ'UÐ'UÑVÔVÐVå”m AÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð!'øõ" Ô%ð 	ð 	ð 	ØˆDˆDð	øøøs=   �AC5 ÁC5 Á!(BÂ	C5 ÂBÂC5 ÂBÂAC5 Ã5DÄDc              ƒ   ó*   K  —  |¦   «         ƒ d {V —† d S r)   r   r&   s     r   rž   zAsyncWorker._process_callback  s*   è è € àˆh‰jŒjÐÐÐÐÐÐÐÐÐr   r…   úasyncio.Task[None]rN   úOptional[asyncio.Queue[Any]]c                 óh  — 	 |                      ¦   «          n6# t          j        $ r Y n%t          $ r t	          j        dd¬¦  «         Y nw xY w|�|                     ¦   «          | j                             |¦  «         d S # |�|                     ¦   «          | j                             |¦  «         w xY w)Nrn   Tro   )	Úresultrˆ   r¡   rs   r   ri   rr   r}   Údiscard)r   r…   rN   s      r   rš   zAsyncWorker._on_task_complete#  sÖ   € ð
	-Ø�KŠK‰MŒMˆMˆMøÝÔ%ð 	ð 	ð 	ØˆDÝð 	Að 	Að 	AÝŒLÐ0¸4Ð@Ñ@Ô@Ð@Ð@Ð@ð	Aøøøð Ð Ø—’Ñ!Ô!Ð!ØÔ×&Ò& tÑ,Ô,Ð,Ð,Ð,øð Ð Ø—’Ñ!Ô!Ð!ØÔ×&Ò& tÑ,Ô,Ð,Ð,øøøs0   ‚ –A? —A
¦A? ¨A
ÁA? Á	A
Á
A? Á?2B1r(   r)   )r   r$   r   N)r…   r£   rN   r¤   r   N)r*   r+   r,   r
   rt   r<   r.   r/   r   r   rC   r#   rŽ   r0   r_   r!   r'   rU   rž   rš   r   r   r   rv   rv   £   sµ  € € € € € Ø);ð >ð > 3ð >Àð >ð >ð >ð >ð ðA˜$ð Að Að Añ „XðAð&ð &ð &ð &ð*ð *ð *ð *ð "�dð "ð "ð "ð "ð
ð ð ð ð
 ;?ðLð LØðLØ(7ðLà	ðLð Lð Lð Lð2 ;?ðð ØðØ(7ðà	'ðð ð ð ðÐ2ð °tð ð ð ð ðð ð ð ð0ð ð ð ð 15ð-à"ð-ð .ð-ð 
ð	-ð -ð -ð -ð -ð -r   rv   )rˆ   r?   r6   Úabcr   r   r   r   Útypingr   Úsentry_sdk._queuer   r	   Úsentry_sdk.constsr
   Úsentry_sdk.utilsr   r   r   r   r   Úobjectr[   r   r2   rv   r   r   r   ú<module>r®      su  ðØ €€€Ø 	€	€	€	Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >àð /Ø.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ð ˆf‰hŒh€ðð ð ð ð ˆSñ ô ð ð>nð nð nð nð n�vñ nô nð nðbQ-ð Q-ð Q-ð Q-ð Q-�&ñ Q-ô Q-ð Q-ð Q-ð Q-r   