£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    Yu                 @   s   d Z ddlmZ ddlZddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZ ddlmZmZ dZed	ZG d
d deZG dd de
eZdS )z
raven.transport.threaded
~~~~~~~~~~~~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
    )absolute_importN)sleeptime)AsyncTransport)HTTPTransport)Queuecheck_threads
   zsentry.errorsc               @   s`   e Zd Ze ZefddZdd Zdd Zdd Z	d	d
 Z
dd ZdddZdd Zdd ZdS )AsyncWorkerc             C   s<   t   td| _t | _d | _d | _d|i| _| 	  d S )Nshutdown_timeout)
r   r   _queue	threadingLock_lock_thread_thread_for_pidoptionsstart)selfr    r   I/opt/alt/python37/lib/python3.7/site-packages/raven/transport/threaded.py__init__   s    


zAsyncWorker.__init__c             C   s"   | j t krdS | jo | j S )NF)r   osgetpidr   is_alive)r   r   r   r   r   (   s    zAsyncWorker.is_alivec             C   s   |   rd S |   d S )N)r   r   )r   r   r   r   _ensure_thread-   s    zAsyncWorker._ensure_threadc             C   s   | j   z|  sd S | j| j | jd }td|}| |s| j	 }t
d|  t
d|  tjdkrzt
d nt
d | ||  d | _W d | j   X d S )Nr   g?z6Sentry is attempting to send %i pending error messageszWaiting up to %s secondsntzPress Ctrl-Break to quitzPress Ctrl-C to quit)r   acquirer   r   
put_nowait_terminatorr   min_timed_queue_joinqsizeprintr   namer   release)r   timeoutZinitial_timeoutsizer   r   r   main_thread_terminated2   s$    







z"AsyncWorker.main_thread_terminatedc             C   s`   t  | }| j}|j  z4x.|jrJ|t   }|dkr:dS |jj|d qW dS |j  X dS )z
        implementation of Queue.join which takes a 'timeout' argument

        returns true on success, false on timeout
        r   F)r'   TN)r   r   all_tasks_doner   unfinished_taskswaitr&   )r   r'   Zdeadlinequeuedelayr   r   r   r"   W   s    


zAsyncWorker._timed_queue_joinc          	   C   sf   | j   z>|  sFtj| jdd| _| jd | j  t	
 | _W d| j   t| j X dS )z)
        Starts the task thread.
        zraven.AsyncWorker)targetr%   TN)r   r   r   r   Thread_targetr   	setDaemonr   r   r   r   r&   atexitregisterr)   )r   r   r   r   r   o   s    


zAsyncWorker.startNc             C   sN   | j   z2| jr:| j| j | jj|d d| _d| _W d| j   X dS )z5
        Stops the task thread. Synchronous!
        )r'   N)	r   r   r   r   r   r    joinr   r&   )r   r'   r   r   r   stop~   s    

zAsyncWorker.stopc             O   s   |    | j|||f d S )N)r   r   r   )r   callbackargskwargsr   r   r   r-      s    zAsyncWorker.queuec             C   sv   xp| j  }zL|| jkrP |\}}}y||| W n" tk
rT   tjddd Y nX W d | j   X td qW d S )NzFailed processing jobT)exc_infor   )r   getr    	Exceptionloggererror	task_doner   )r   recordr7   r8   r9   r   r   r   r1      s    


zAsyncWorker._target)N)__name__
__module____qualname__objectr    DEFAULT_TIMEOUTr   r   r   r)   r"   r   r6   r-   r1   r   r   r   r   r
      s   %
r
   c                   s8   e Zd ZddddgZdd Z fddZd	d
 Z  ZS )ThreadedHTTPTransporthttphttpszthreaded+httpzthreaded+httpsc             C   s"   t | dr| j st | _| jS )N_worker)hasattrrI   r   r
   )r   r   r   r   
get_worker   s    z ThreadedHTTPTransport.get_workerc          
      sN   yt t| ||| W n* tk
rB } z|| W d d }~X Y nX |  d S )N)superrF   sendr<   )r   urldataheaders
success_cb
failure_cbe)	__class__r   r   	send_sync   s
    zThreadedHTTPTransport.send_syncc             C   s   |   | j||||| d S )N)rK   r-   rU   )r   rN   rO   rP   rQ   rR   r   r   r   
async_send   s    z ThreadedHTTPTransport.async_send)rA   rB   rC   schemerK   rU   rV   __classcell__r   r   )rT   r   rF      s   rF   )__doc__
__future__r   r3   loggingr   r   r   r   Zraven.transport.baser   Zraven.transport.httpr   Zraven.utils.compatr   r   rE   	getLoggerr=   rD   r
   rF   r   r   r   r   <module>   s   
 