o
    h                     @   s  d dl 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	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'yw   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(m0Z0 G dd deZ1ej2dd Z3dd Z4dd Z5G dd  d eZ6dS )!    N)iscoroutinefunction)continue_trace)OP)Hub_should_send_default_pii)TRANSACTION_SOURCE_COMPONENTTRANSACTION_SOURCE_ROUTE)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)TYPE_CHECKING)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 } | r$ 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                    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 b/var/www/html/aiguide_backend/venv/lib/python3.10/site-packages/sentry_sdk/integrations/tornado.pysentry_execute_request_handlerI   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-   P   s
   
$c                    s(   t |||  | |||g|R i |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)
TORNADO_VERSIONr   r	   r
   r   r   _executer   r   log_exception)	awaitabler-   r4   r+   )r*   r3   r,   
setup_once2   s&   
zTornadoIntegration.setup_onceN)__name__
__module____qualname__
identifierstaticmethodr9   r+   r+   r+   r,   r    /   s    r    c              	   c   s    t j}|t}|d u rd V  t| }t |\}| jj}| }|	  t
|}|| W d    n1 s:w   Y  t|tjdtd}|j|d| jid d V  W d    n1 s`w   Y  W d    d S W d    d S 1 sxw   Y  d S )Nzgeneric Tornado request)opnamesourcetornado_request)custom_sampling_context)r   currentget_integrationr    weakrefrefrequestheadersconfigure_scopeclear_breadcrumbs_make_event_processoradd_event_processorr   r   HTTP_SERVERr   start_transaction)r&   hubintegrationweak_handlerrI   scope	processortransactionr+   r+   r,   r%   c   s6   




"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)typehandled)client_options	mechanism)hint)
r   rD   rE   r    
isinstancer   clientr   optionscapture_event)r0   r1   r2   rP   r\   eventrZ   r+   r+   r,   r/      s   

r/   c                    s    fdd}|S )Nc                    s`    }|d u r	| S |j }t  t||j j }t|| d< dti| d< W d    n1 s/w   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 suw   Y  t ) |jrt r| di dd W d    | S W d    | S W d    | S 1 sw   Y  | S )NrU   rA   transaction_inforH   z	%s://%s%surlquery_stringmethodREMOTE_ADDRenvrI   useris_authenticatedT)rH   r   getattrrc   lowerr   r   TornadoRequestExtractorextract_into_eventprotocolhostpathquery	remote_ipr   dictrI   current_userr   
setdefault)r_   rZ   handlerrH   rc   	extractorrequest_inforR   r+   r,   tornado_processor   sH   






z0_make_event_processor.<locals>.tornado_processorr+   )rR   rx   r+   rw   r,   rL      s   $rL   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 )rj   c                 C   s   | j jd u rdS t| j jS )Nr   )rH   bodylenr&   r+   r+   r,   content_length   s   z&TornadoRequestExtractor.content_lengthc                 C      dd t | jjD S )Nc                 S   s   i | ]\}}||j qS r+   )r1   .0kvr+   r+   r,   
<dictcomp>       z3TornadoRequestExtractor.cookies.<locals>.<dictcomp>)r   rH   cookiesr{   r+   r+   r,   r         zTornadoRequestExtractor.cookiesc                 C   s   | j jS r#   )rH   ry   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>)r   rH   body_argumentsr{   r+   r+   r,   form   s   
zTornadoRequestExtractor.formc                 C   s   t | jjdS )Nzcontent-type)r   rH   rI   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>)r   rH   filesr{   r+   r+   r,   r      r   zTornadoRequestExtractor.filesc                 C   s   t |jpdS )Nr+   )rz   ry   )r&   filer+   r+   r,   size_of_file   s   z$TornadoRequestExtractor.size_of_fileN)
r:   r;   r<   r|   r   r   r   r   r   r   r+   r+   r+   r,   rj      s    rj   )7rF   
contextlibinspectr   sentry_sdk.apir   sentry_sdk.constsr   sentry_sdk.hubr   r   sentry_sdk.tracingr   r   sentry_sdk.utilsr	   r
   r   r   r   sentry_sdk.integrationsr   r   $sentry_sdk.integrations._wsgi_commonr   r   r   sentry_sdk.integrations.loggingr   sentry_sdk._compatr   r!   r   r5   tornado.webr   r   tornado.genr   ImportErrorsentry_sdk._typesr   typingr   r   r   r   r   r   r    contextmanagerr%   r/   rL   rj   r+   r+   r+   r,   <module>   sB    4
#)