o
    0 i&                     @   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 k/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   Z_executer   r   Zlog_exception)	awaitabler,   r3   r*   )r)   r2   r+   
setup_once1   s$   

zTornadoIntegration.setup_onceN)__name__
__module____qualname__
identifieroriginstaticmethodr6   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;   Ztornado_request)Zcustom_sampling_context)
sentry_sdk
get_clientZget_integrationr    weakrefrefZisolation_scoperequestheadersZclear_breadcrumbs_make_event_processorZadd_event_processorr   r   ZHTTP_SERVERr   ZROUTEr;   Zstart_transaction)r%   Zintegrationweak_handlerscoperE   	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)typeZhandled)Zclient_optionsZ	mechanism)hint)
isinstancer   r
   r@   rA   optionsZcapture_event)r/   r0   r1   eventrL   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 rJ   r?   Ztransaction_inforD   z	%s://%s%surlZquery_stringmethodZREMOTE_ADDRenvrE   useris_authenticatedT)rD   r   getattrrR   lowerr   r   Z	COMPONENTTornadoRequestExtractorZextract_into_eventprotocolhostpathqueryZ	remote_ipr   dictrE   current_userr   
setdefault)rO   rL   handlerrD   rR   Z	extractorZrequest_inforG   r*   r+   tornado_processor   sH   






z0_make_event_processor.<locals>.tornado_processorr*   )rG   rb   r*   ra   r+   rF      s   $rF   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 )rX   c                 C   s   | j jd u rdS t| j jS )Nr   )rD   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>)rD   cookiesitemsre   r*   r*   r+   rn         zTornadoRequestExtractor.cookiesc                 C   s   | j jS r"   )rD   rc   re   r*   r*   r+   raw_data   s   z TornadoRequestExtractor.raw_datac                 C   rg   )Nc                 S   s    i | ]\}}|d d |D qS )c                 S   s   g | ]}| d dqS )latin1replace)decode)ri   rk   r*   r*   r+   
<listcomp>   rm   z;TornadoRequestExtractor.form.<locals>.<dictcomp>.<listcomp>r*   )ri   rj   vsr*   r*   r+   rl      s    z0TornadoRequestExtractor.form.<locals>.<dictcomp>)rD   Zbody_argumentsro   re   r*   r*   r+   form   s   
zTornadoRequestExtractor.formc                 C   s   t | jjdS )Nzcontent-type)r   rD   rE   getre   r*   r*   r+   is_json   s   zTornadoRequestExtractor.is_jsonc                 C   rg   )Nc                 S   s   i | ]\}}|r||d  qS )r   r*   rh   r*   r*   r+   rl      s    z1TornadoRequestExtractor.files.<locals>.<dictcomp>)rD   filesro   re   r*   r*   r+   rz      rp   zTornadoRequestExtractor.filesc                 C   s   t |jpdS )Nr*   )rd   rc   )r%   filer*   r*   r+   size_of_file   s   z$TornadoRequestExtractor.size_of_fileN)
r7   r8   r9   rf   rn   rq   rw   ry   rz   r|   r*   r*   r*   r+   rX      s    rX   )7rB   
contextlibinspectr   r@   Zsentry_sdk.apir   Zsentry_sdk.constsr   Zsentry_sdk.scoper   Zsentry_sdk.tracingr   Zsentry_sdk.utilsr   r   r	   r
   r   r   Zsentry_sdk.integrationsr   r   r   Z$sentry_sdk.integrations._wsgi_commonr   r   r   Zsentry_sdk.integrations.loggingr   r!   r   r4   Ztornado.webr   r   Ztornado.genr   ImportErrortypingr   r   r   r   r   r   Zsentry_sdk._typesr   r   r    contextmanagerr$   r.   rF   rX   r*   r*   r*   r+   <module>   sD     4
"
)