o
    0 i2                     @   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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 d dlmZmZ d d	lmZmZmZ d d
lmZmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* zd dl+Z+d dl,m-Z. d dl,m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4 W n e5y   edw d dl6m7Z7 e7rd dl8m9Z9 d dl:m;Z; d dl,m<Z<m=Z= d dl>m?Z? d dl@mAZA d dl6mBZB d dl6mCZC d dl6mDZD d dl6mEZE d dlmFZF d dlGmHZHmIZI dZJG dd deZKdd  ZLd!d" ZMd#d$ ZNd%ZOd&d' ZPdS )(    N)wraps)continue_trace)OP
SPANSTATUSSPANDATA)$_DEFAULT_FAILED_REQUEST_STATUS_CODES_check_minimum_versionIntegrationDidNotEnable)ignore_logger)track_session)_filter_headersrequest_body_within_bounds)BAGGAGE_HEADER_NAMESOURCE_FOR_STYLETransactionSource)should_propagate_traceadd_http_request_source)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionlogger	parse_urlparse_versionreraisetransaction_from_functionHAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGESENSITIVE_DATA_SUBSTITUTEAnnotatedValue)__version__)ClientSessionTraceConfig)ApplicationHTTPExceptionUrlDispatcherzAIOHTTP not installed)TYPE_CHECKING)Request)UrlMappingMatchInfo)TraceRequestStartParamsTraceRequestEndParams)Set)SimpleNamespace)Any)Optional)Tuple)Union)ExcInfo)EventEventProcessor)handler_namemethod_and_path_patternc                   @   s8   e Zd ZdZde Z	d
edddZedd Zd	S )AioHttpIntegrationaiohttpz
auto.http.r4   )failed_request_status_codesc                C   s(   |t vrtd|t f || _|| _d S )Nz7Invalid value for transaction_style: %s (must be in %s))TRANSACTION_STYLE_VALUES
ValueErrortransaction_style_failed_request_status_codes)selfr;   r8    r>   k/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/sentry_sdk/integrations/aiohttp.py__init__K   s   
zAioHttpIntegration.__init__c                     s   t t} tt|  tstdt td tj	fdd}|t_	t
jtfdd}|t
_tj tt  fdd}|t_d S )	NzSThe aiohttp integration for Sentry requires Python 3.7+  or aiocontextvars package.zaiohttp.serverc                    s  t  t}|d u r | |g|R i |I d H S t|}t  }t|dd |  |	  |
t| t|j}t|tjdtjtjd}t j|d|idp z
 | |I d H }	W n9 ty| }
 z||
j |
j|jv rwt   d }
~
w tjtfy   |tj   t y   t!t   Y nw z|	j"}W n	 t#y   Y nw || |	W  d    W  d    W  d    S 1 sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nrequest)Zsession_modezgeneric AIOHTTP request)opnamesourceoriginZaiohttp_request)Zcustom_sampling_context)$
sentry_sdk
get_clientget_integrationr6   weakrefrefZisolation_scoper   Zgenerate_propagation_contextZclear_breadcrumbsZadd_event_processor_make_request_processordictheadersr   r   ZHTTP_SERVERr   ZROUTErE   Zstart_transactionr$   set_http_statusstatus_coder<   _capture_exceptionasyncioCancelledErrorConnectionResetErrorZ
set_statusr   	CANCELLED	Exceptionr   statusAttributeError)r=   rA   argskwargsintegrationweak_requestscoperM   ZtransactionresponseeZresponse_status)
old_handler>   r?   sentry_app_handlem   sj   


	

"z8AioHttpIntegration.setup_once.<locals>.sentry_app_handlec                    s    | |I d H }t  t}|d u r|S d }z'|jdkr$t|j}n|jdkr>| }|dp6|d}d	|j
|}W n	 tyH   Y nw |d urYt  j|t|j d |S )Nr4   r5   path	formatterz{} {})rD   )rF   rG   rH   r6   r;   r   handlerget_infogetformatmethodrU   get_current_scopeZset_transaction_namer   )r=   rA   rvrZ   rC   Z
route_infopattern)old_urldispatcher_resolver>   r?   sentry_urldispatcher_resolve   s.   

zCAioHttpIntegration.setup_once.<locals>.sentry_urldispatcher_resolvec                     s8   t |dpd}t }|| ||d<  | i |S )NZtrace_configsr>   )listre   create_trace_configappend)rX   rY   Zclient_trace_configstrace_config)old_client_session_initr>   r?   init   s
   
z+AioHttpIntegration.setup_once.<locals>.init)r   AIOHTTP_VERSIONr   r6   r   r
   r   r   r#   Z_handler%   resolver   r!   r@   r   )versionr`   rl   rr   r>   )rq   r_   rk   r?   
setup_onceZ   s(   
?
	zAioHttpIntegration.setup_onceN)r4   )	__name__
__module____qualname__
identifierrE   r   r@   staticmethodrv   r>   r>   r>   r?   r6   G   s    
r6   c                  C   s2   dd } dd }t  }|j|  |j| |S )Nc           	         sR  t  td u rd S |j }d }t  tt|j	dd}W d    n1 s*w   Y  t j
tjd||r:|j	ntf tjd}|tj| |d urd|d|j	 |tj|j |tj|j t  }t|t|j	rt  j|dD ]+\}}tdj|||j	d |tkr|jtr|j|  d	| 7  < qx||j|< qx||_d S )
NF)sanitizez%s %s)rB   rC   rE   url)spanzE[Tracing] Adding `{key}` header {value} to outgoing request to {url}.)keyvaluer}   ,) rF   rG   rH   r6   rg   upperr   r   strr}   Z
start_spanr   ZHTTP_CLIENTr   rE   set_datar   ZHTTP_METHODZ
HTTP_QUERYqueryZHTTP_FRAGMENTfragmentr   rh   Ziter_trace_propagation_headersr   debugrf   r   rM   re   r~   )	sessiontrace_config_ctxparamsrg   
parsed_urlr~   clientr   r   r>   r>   r?   on_request_start   sN   

z-create_trace_config.<locals>.on_request_startc                    st   |j d u rd S |j }|t|jj |d|jj |  t  t	| W d    d S 1 s3w   Y  d S )Nreason)
r~   rN   intr]   rV   r   r   finishr   r   )r   r   r   r~   r>   r>   r?   on_request_end  s   

"z+create_trace_config.<locals>.on_request_end)r"   r   ro   r   )r   r   rp   r>   r>   r?   rn      s   /rn   c                    s    fdd}|S )Nc                    s     }|d u r	| S t  ; | di }d|j|j|jf |d< |j|d< |j|d< d|ji|d< tt	|j
|d< t||d	< W d    | S 1 sJw   Y  | S )
NrA   z	%s://%s%sr}   query_stringrg   ZREMOTE_ADDRenvrM   data)r   
setdefaultschemehostra   r   rg   remoter   rL   rM   get_aiohttp_request_data)eventhintrA   Zrequest_infor[   r>   r?   aiohttp_processor'  s&   



z2_make_request_processor.<locals>.aiohttp_processorr>   )r[   r   r>   r   r?   rK   %  s   rK   c                  C   s8   t  } t| t jdddd\}}tj||d | S )Nr7   F)typeZhandled)Zclient_optionsZ	mechanism)r   )sysexc_infor   rF   rG   optionsZcapture_event)r   r   r   r>   r>   r?   rP   H  s   
rP   z8[Can't show request body due to implementation details.]c                 C   sL   | j }|d urtt t|st S | jpd}||dS | j	r$t
S d S )Nzutf-8replace)Z_read_bytesr   rF   rG   lenr   Zremoved_because_over_size_limitcharsetdecodeZcan_read_bodyBODY_NOT_READ_MESSAGE)rA   Z
bytes_bodyencodingr>   r>   r?   r   W  s   
r   )Qr   rI   	functoolsr   rF   Zsentry_sdk.apir   Zsentry_sdk.constsr   r   r   Zsentry_sdk.integrationsr   r   r	   r
   Zsentry_sdk.integrations.loggingr   Zsentry_sdk.sessionsr   Z$sentry_sdk.integrations._wsgi_commonr   r   Zsentry_sdk.tracingr   r   r   Zsentry_sdk.tracing_utilsr   r   Zsentry_sdk.utilsr   r   r   r   r   r   r   r   r   r   r   r   rQ   r7   r    rs   r!   r"   Zaiohttp.webr#   r$   r%   ImportErrortypingr&   Zaiohttp.web_requestr'   Zaiohttp.web_urldispatcherr(   r)   r*   collections.abcr+   typesr,   r-   r.   r/   r0   r1   Zsentry_sdk._typesr2   r3   r9   r6   rn   rK   rP   r   r   r>   r>   r>   r?   <module>   sT    8 G#