
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    „á§\ó  ã                   @   s¸   d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d dlmZmZ d d	lmZ G d
d„ deƒZdd„ Zdd„ ZG dd„ deƒZ dS )é    N)Úiscoroutinefunction)ÚHubÚ_should_send_default_pii)ÚHAS_REAL_CONTEXTVARSÚevent_from_exceptionÚcapture_internal_exceptionsÚtransaction_from_function)ÚIntegration)ÚRequestExtractorÚ_filter_headersÚ_is_json_content_type)Úignore_logger)ÚRequestHandlerÚ	HTTPError)Ú	coroutinec                   @   s   e Zd ZdZedd„ ƒZdS )ÚTornadoIntegrationÚtornadoc                     sš   dd l } t| dd ƒ}|d ks$|dk r,tdƒ‚ts8tdƒ‚tdƒ tdƒ tj‰ tˆ ƒ}|rh‡ fdd	„}nt‡ fd
d	„ƒ}|t_tj	‰‡fdd„}|t_	d S )Nr   Úversion_info)é   r   zTornado 5+ requiredzUThe tornado integration for Sentry requires Python 3.6+ or the aiocontextvars packageztornado.applicationztornado.accessc              
   Ÿ   s˜   t j}| t¡}|d kr.ˆ | f|ž|ŽI d H S t | ¡}t |ƒ�N}| ¡ �}| ¡  | t	|ƒ¡ W 5 Q R X ˆ | f|ž|ŽI d H W  5 Q R £ S Q R X d S ©N)
r   ÚcurrentÚget_integrationr   ÚweakrefÚrefÚconfigure_scopeZclear_breadcrumbsÚadd_event_processorÚ_make_event_processor)ÚselfÚargsÚkwargsÚhubÚintegrationÚweak_handlerÚscope©Úold_execute© úP/opt/alt/python38/lib/python3.8/site-packages/sentry_sdk/integrations/tornado.pyÚsentry_execute_request_handler;   s    



zETornadoIntegration.setup_once.<locals>.sentry_execute_request_handlerc              
   ?   sŽ   t j}| t¡}|d kr(ˆ | f|ž|ŽS t | ¡}t |ƒ�J}| ¡ �}| t|ƒ¡ W 5 Q R X ˆ | f|ž|ŽE d H }|W  5 Q R £ S Q R X d S r   )	r   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   r#   Úresultr$   r&   r'   r(   L   s    



c                    s"   t |||ƒ ˆ | |||f|ž|ŽS r   )Ú_capture_exception)r   ÚtyÚvalueÚtbr   r   )Úold_log_exceptionr&   r'   Úsentry_log_exception_   s    z;TornadoIntegration.setup_once.<locals>.sentry_log_exception)
r   ÚgetattrÚRuntimeErrorr   r   r   Z_executer   r   Zlog_exception)r   Ztornado_versionZ	awaitabler(   r/   r&   )r%   r.   r'   Ú
setup_once!   s(    ÿzTornadoIntegration.setup_onceN)Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚstaticmethodr2   r&   r&   r&   r'   r      s   r   c                 C   sZ   t j}| t¡d krd S t|tƒr&d S t| ||f|jjdddœd�\}}|j	||d� d S )Nr   F)ÚtypeZhandled)Zclient_optionsZ	mechanism)Úhint)
r   r   r   r   Ú
isinstancer   r   ZclientÚoptionsZcapture_event)r+   r,   r-   r    Úeventr9   r&   r&   r'   r*   g   s    
ý
r*   c                    s   ‡ fdd„}|S )Nc              	      sò   ˆ ƒ }|d kr| S |j }tƒ �$ t||j j ¡ ƒ}t|ƒ| d< W 5 Q R X tƒ �l t|ƒ}| | ¡ | d }d|j|j	|j
f |d< |j|d< |j|d< d|ji|d< tt|jƒƒ|d	< W 5 Q R X tƒ �" |jrätƒ räd
|  di ¡d< W 5 Q R X | S )NZtransactionÚrequestz	%s://%s%sÚurlZquery_stringÚmethodZREMOTE_ADDRÚenvÚheadersTÚuserZis_authenticated)r=   r   r0   r?   Úlowerr   ÚTornadoRequestExtractorZextract_into_eventZprotocolÚhostÚpathÚqueryZ	remote_ipr   ÚdictrA   Zcurrent_userr   Ú
setdefault)r<   r9   Úhandlerr=   r?   Z	extractorZrequest_info©r"   r&   r'   Útornado_processorz   s0    
ý


z0_make_event_processor.<locals>.tornado_processorr&   )r"   rL   r&   rK   r'   r   x   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 )rD   c                 C   s   | j jd krdS t| j jƒS )Nr   )r=   ÚbodyÚlen©r   r&   r&   r'   Úcontent_length¡   s    z&TornadoRequestExtractor.content_lengthc                 C   s   dd„ | j j ¡ D ƒS )Nc                 S   s   i | ]\}}||j “qS r&   )r,   ©Ú.0ÚkÚvr&   r&   r'   Ú
<dictcomp>©   s      z3TornadoRequestExtractor.cookies.<locals>.<dictcomp>)r=   ÚcookiesÚitemsrO   r&   r&   r'   rV   §   s    zTornadoRequestExtractor.cookiesc                 C   s   | j jS r   )r=   rM   rO   r&   r&   r'   Úraw_data«   s    z TornadoRequestExtractor.raw_datac                 C   s   dd„ | j j ¡ D ƒS )Nc                 S   s    i | ]\}}|d d„ |D ƒ“qS )c                 S   s   g | ]}|  d d¡‘qS )Úlatin1Úreplace)Údecode)rR   rT   r&   r&   r'   Ú
<listcomp>²   s     z;TornadoRequestExtractor.form.<locals>.<dictcomp>.<listcomp>r&   )rR   rS   Úvsr&   r&   r'   rU   ±   s   ÿ z0TornadoRequestExtractor.form.<locals>.<dictcomp>)r=   Zbody_argumentsrW   rO   r&   r&   r'   Úform¯   s    
þzTornadoRequestExtractor.formc                 C   s   t | jj d¡ƒS )Nzcontent-type)r   r=   rA   ÚgetrO   r&   r&   r'   Úis_json¶   s    zTornadoRequestExtractor.is_jsonc                 C   s   dd„ | j j ¡ D ƒS )Nc                 S   s   i | ]\}}|r||d  “qS )r   r&   rQ   r&   r&   r'   rU   ¼   s       z1TornadoRequestExtractor.files.<locals>.<dictcomp>)r=   ÚfilesrW   rO   r&   r&   r'   ra   º   s    zTornadoRequestExtractor.filesc                 C   s   t |jp
dƒS )Nr&   )rN   rM   )r   Úfiler&   r&   r'   Úsize_of_file¾   s    z$TornadoRequestExtractor.size_of_fileN)
r3   r4   r5   rP   rV   rX   r^   r`   ra   rc   r&   r&   r&   r'   rD       s   rD   )!r   Úinspectr   Zsentry_sdk.hubr   r   Zsentry_sdk.utilsr   r   r   r   Zsentry_sdk.integrationsr	   Z$sentry_sdk.integrations._wsgi_commonr
   r   r   Zsentry_sdk.integrations.loggingr   Ztornado.webr   r   Ztornado.genr   ZAnyZListÚOptionalÚDictÚCallabler   r*   r   rD   r&   r&   r&   r'   Ú<module>   s   
I(