o
    h&                     @   s  d dl Z d dlZd dlmZ d dl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mZmZmZmZmZ d dlmZmZmZ d d	lmZmZ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&yu   edw d dl'm(Z( e(rd 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/m0Z0 G dd deZ1ej2dd Z3ee1dd Z4dd Z5G dd deZ6dS )     N)iscoroutinefunction)continue_trace)OP)should_send_default_pii)TransactionSource)HAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGEensure_integration_enabledevent_from_exceptioncapture_internal_exceptionstransaction_from_function)_check_minimum_versionIntegrationDidNotEnable)RequestExtractor_filter_headers_is_json_content_type)ignore_logger)version_info)RequestHandler	HTTPError)	coroutinezTornado not installed)TYPE_CHECKING)Any)Optional)Dict)Callable)	Generator)EventEventProcessorc                   @   s&   e Zd ZdZde Zedd ZdS )TornadoIntegrationtornadoz
auto.http.c                     st   t tt tstdt td tj t	 } | r! fdd}nt
 fdd}|t_tjfdd}|t_d S )NzUThe tornado integration for Sentry requires Python 3.7+ or the aiocontextvars packageztornado.accessc                    sJ   t |   | g|R i |I d H W  d    S 1 sw   Y  d S N_handle_request_impl)selfargskwargsold_execute a/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/tornado.pysentry_execute_request_handlerG   s   
$zETornadoIntegration.setup_once.<locals>.sentry_execute_request_handlerc                 ?   sN    t |   | g|R i |E d H }|W  d    S 1 s w   Y  d S r"   r#   )r%   r&   r'   resultr(   r*   r+   r,   N   s
   
$c                    s(   t |||  | |||g|R i |S r"   )_capture_exception)r%   tyvaluetbr&   r'   )old_log_exceptionr*   r+   sentry_log_exceptionY   s   z;TornadoIntegration.setup_once.<locals>.sentry_log_exception)r   r    TORNADO_VERSIONr   r   r   r   r   _executer   r   log_exception)	awaitabler,   r3   r*   )r)   r2   r+   
setup_once1   s$   

zTornadoIntegration.setup_onceN)__name__
__module____qualname__
identifieroriginstaticmethodr8   r*   r*   r*   r+   r    -   s
    
r    c              	   c   s    t  t}|d u rd V  t| }t  K}| jj}|	  t
|}|| t|tjdtjtjd}t j|d| jid d V  W d    n1 sNw   Y  W d    d S W d    d S 1 sfw   Y  d S )Nzgeneric Tornado request)opnamesourcer=   tornado_request)custom_sampling_context)
sentry_sdk
get_clientget_integrationr    weakrefrefisolation_scoperequestheadersclear_breadcrumbs_make_event_processoradd_event_processorr   r   HTTP_SERVERr   ROUTEr=   start_transaction)r%   integrationweak_handlerscoperK   	processortransactionr*   r*   r+   r$   a   s2   



"r$   c                 C   sD   t |trd S t| ||ft jdddd\}}tj||d d S )Nr!   F)typehandled)client_options	mechanism)hint)
isinstancer   r
   rD   rE   optionscapture_event)r/   r0   r1   eventr[   r*   r*   r+   r.      s   

r.   c                    s    fdd}|S )Nc                    sf    }|d u r	| S |j }t   t||j j }t|pd| d< dtji| d< W d    n1 s2w   Y  t ; t|}|	|  | d }d|j
|j|jf |d< |j|d< |j|d	< d
|ji|d< tt|j|d< W d    n1 sxw   Y  t ) |jrt r| di dd W d    | S W d    | S W d    | S 1 sw   Y  | S )N rV   rA   transaction_inforJ   z	%s://%s%surlquery_stringmethodREMOTE_ADDRenvrK   useris_authenticatedT)rJ   r   getattrrd   lowerr   r   	COMPONENTTornadoRequestExtractorextract_into_eventprotocolhostpathquery	remote_ipr   dictrK   current_userr   
setdefault)r_   r[   handlerrJ   rd   	extractorrequest_inforS   r*   r+   tornado_processor   sH   






z0_make_event_processor.<locals>.tornado_processorr*   )rS   rz   r*   ry   r+   rM      s   $rM   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 )rl   c                 C   s   | j jd u rdS t| j jS )Nr   )rJ   bodylenr%   r*   r*   r+   content_length   s   z&TornadoRequestExtractor.content_lengthc                 C      dd | j j D S )Nc                 S   s   i | ]\}}||j qS r*   )r0   .0kvr*   r*   r+   
<dictcomp>       z3TornadoRequestExtractor.cookies.<locals>.<dictcomp>)rJ   cookiesitemsr}   r*   r*   r+   r         zTornadoRequestExtractor.cookiesc                 C   s   | j jS r"   )rJ   r{   r}   r*   r*   r+   raw_data   s   z TornadoRequestExtractor.raw_datac                 C   r   )Nc                 S   s    i | ]\}}|d d |D qS )c                 S   s   g | ]}| d dqS )latin1replace)decode)r   r   r*   r*   r+   
<listcomp>   r   z;TornadoRequestExtractor.form.<locals>.<dictcomp>.<listcomp>r*   )r   r   vsr*   r*   r+   r      s    z0TornadoRequestExtractor.form.<locals>.<dictcomp>)rJ   body_argumentsr   r}   r*   r*   r+   form   s   
zTornadoRequestExtractor.formc                 C   s   t | jjdS )Nzcontent-type)r   rJ   rK   getr}   r*   r*   r+   is_json   s   zTornadoRequestExtractor.is_jsonc                 C   r   )Nc                 S   s   i | ]\}}|r||d  qS )r   r*   r   r*   r*   r+   r      s    z1TornadoRequestExtractor.files.<locals>.<dictcomp>)rJ   filesr   r}   r*   r*   r+   r      r   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)
r9   r:   r;   r~   r   r   r   r   r   r   r*   r*   r*   r+   rl      s    rl   )7rG   
contextlibinspectr   rD   sentry_sdk.apir   sentry_sdk.constsr   sentry_sdk.scoper   sentry_sdk.tracingr   sentry_sdk.utilsr   r   r	   r
   r   r   sentry_sdk.integrationsr   r   r   $sentry_sdk.integrations._wsgi_commonr   r   r   sentry_sdk.integrations.loggingr   r!   r   r4   tornado.webr   r   tornado.genr   ImportErrortypingr   r   r   r   r   r   sentry_sdk._typesr   r   r    contextmanagerr$   r.   rM   rl   r*   r*   r*   r+   <module>   sD     4
"
)