a
    xd                     @   sx  d dl Z d dlZd dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZmZmZmZm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 z,d d
lmZ d dlmZm Z  d dl!m"Z" W n e#y   edY n0 d dl$m%Z% e%r6d dl&m'Z' d dl&m(Z( d dl&m)Z) d dl&m*Z* d dl&m+Z+ d dl$m,Z, G dd deZ-ej.dd Z/dd Z0dd Z1G dd deZ2dS )    N)iscoroutinefunction)Hub_should_send_default_pii)TRANSACTION_SOURCE_COMPONENTTransaction)HAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGEevent_from_exceptioncapture_internal_exceptionstransaction_from_function)IntegrationDidNotEnable)RequestExtractor_filter_headers_is_json_content_type)ignore_logger)	iteritems)version_info)RequestHandler	HTTPError)	coroutinezTornado not installed)MYPY)Any)Optional)Dict)Callable)	Generator)EventProcessorc                   @   s   e Zd ZdZedd ZdS )TornadoIntegrationtornadoc                     sz   t dk rtdts tdt td tj t } | rH fdd}nt fdd}|t_tj	fdd	}|t_	d S )
N)   r   zTornado 5+ requiredzUThe tornado integration for Sentry requires Python 3.7+ or the aiocontextvars packageztornado.accessc                    sH   t | ,  | g|R i |I d H W  d    S 1 s:0    Y  d S N_handle_request_impl)selfargskwargsold_execute W/var/www/html/Ranjet/env/lib/python3.9/site-packages/sentry_sdk/integrations/tornado.pysentry_execute_request_handlerD   s    
zETornadoIntegration.setup_once.<locals>.sentry_execute_request_handlerc                 ?   sL   t | 0  | g|R i |E d H }|W  d    S 1 s>0    Y  d S r!   r"   )r$   r%   r&   resultr'   r)   r*   r+   K   s    
c                    s(   t |||  | |||g|R i |S r!   )_capture_exception)r$   tyvaluetbr%   r&   )old_log_exceptionr)   r*   sentry_log_exceptionV   s    z;TornadoIntegration.setup_once.<locals>.sentry_log_exception)
TORNADO_VERSIONr   r   r   r   r   Z_executer   r   Zlog_exception)Z	awaitabler+   r2   r)   )r(   r1   r*   
setup_once-   s&    zTornadoIntegration.setup_onceN)__name__
__module____qualname__
identifierstaticmethodr4   r)   r)   r)   r*   r   *   s   r   c              	   c   s   t j}|t}|d u rd V  t| }t |}| *}|  t|}|	| W d    n1 sj0    Y  t
j| jjddd}|j|d| jid d V  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nzhttp.serverzgeneric Tornado request)opnameZtornado_request)Zcustom_sampling_context)r   currentget_integrationr   weakrefrefZconfigure_scopeZclear_breadcrumbs_make_event_processorZadd_event_processorr   Zcontinue_from_headersrequestheadersZstart_transaction)r$   hubZintegrationweak_handlerZscope	processortransactionr)   r)   r*   r#   ^   s&    



(

r#   c                 C   s^   t j}|td u rd S t|tr&d S |j}t| ||f|jdddd\}}|j	||d d S )Nr   F)typeZhandled)Zclient_optionsZ	mechanism)hint)
r   r<   r=   r   
isinstancer   clientr	   optionsZcapture_event)r.   r/   r0   rC   rJ   eventrH   r)   r)   r*   r-      s    

r-   c                    s    fdd}|S )Nc                    sD    }|d u r| S |j }t : t||j j }t|| d< dti| d< W d    n1 s^0    Y  t v t|}||  | d }d|j	|j
|jf |d< |j|d< |j|d< d	|ji|d
< tt|j|d< W d    n1 s0    Y  t 4 |jr t r | di dd W d    n1 s60    Y  | S )NrF   sourceZtransaction_inforA   z	%s://%s%surlZquery_stringmethodZREMOTE_ADDRenvrB   useris_authenticatedT)rA   r
   getattrrO   lowerr   r   TornadoRequestExtractorZextract_into_eventprotocolhostpathqueryZ	remote_ipr   dictrB   Zcurrent_userr   
setdefault)rL   rH   handlerrA   rO   Z	extractorZrequest_inforD   r)   r*   tornado_processor   s2    *



04z0_make_event_processor.<locals>.tornado_processorr)   )rD   r^   r)   r]   r*   r@      s    $r@   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )rU   c                 C   s   | j jd u rdS t| j jS )Nr   )rA   bodylenr$   r)   r)   r*   content_length   s    z&TornadoRequestExtractor.content_lengthc                 C   s   dd t | jjD S )Nc                 S   s   i | ]\}}||j qS r)   )r/   .0kvr)   r)   r*   
<dictcomp>       z3TornadoRequestExtractor.cookies.<locals>.<dictcomp>)r   rA   cookiesra   r)   r)   r*   ri      s    zTornadoRequestExtractor.cookiesc                 C   s   | j jS r!   )rA   r_   ra   r)   r)   r*   raw_data   s    z TornadoRequestExtractor.raw_datac                 C   s   dd t | jjD S )Nc                 S   s    i | ]\}}|d d |D qS )c                 S   s   g | ]}| d dqS )latin1replace)decode)rd   rf   r)   r)   r*   
<listcomp>   rh   z;TornadoRequestExtractor.form.<locals>.<dictcomp>.<listcomp>r)   )rd   re   vsr)   r)   r*   rg      s   z0TornadoRequestExtractor.form.<locals>.<dictcomp>)r   rA   Zbody_argumentsra   r)   r)   r*   form   s    
zTornadoRequestExtractor.formc                 C   s   t | jjdS )Nzcontent-type)r   rA   rB   getra   r)   r)   r*   is_json   s    zTornadoRequestExtractor.is_jsonc                 C   s   dd t | jjD S )Nc                 S   s   i | ]\}}|r||d  qS )r   r)   rc   r)   r)   r*   rg      rh   z1TornadoRequestExtractor.files.<locals>.<dictcomp>)r   rA   filesra   r)   r)   r*   rs      s    zTornadoRequestExtractor.filesc                 C   s   t |jp
dS )Nr)   )r`   r_   )r$   filer)   r)   r*   size_of_file   s    z$TornadoRequestExtractor.size_of_fileN)
r5   r6   r7   rb   ri   rj   rp   rr   rs   ru   r)   r)   r)   r*   rU      s   rU   )3r>   
contextlibinspectr   Zsentry_sdk.hubr   r   Zsentry_sdk.tracingr   r   Zsentry_sdk.utilsr   r   r	   r
   r   Zsentry_sdk.integrationsr   r   Z$sentry_sdk.integrations._wsgi_commonr   r   r   Zsentry_sdk.integrations.loggingr   Zsentry_sdk._compatr   r   r   r3   Ztornado.webr   r   Ztornado.genr   ImportErrorZsentry_sdk._typesr   typingr   r   r   r   r   r   r   contextmanagerr#   r-   r@   rU   r)   r)   r)   r*   <module>   s:   4
 )