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mZ d dl	m
Z
 d dl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 d dl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*m+Z+ d dl,m-Z-m.Z.m/Z/ W n e0y   edw d dl1m2Z2 e2rd dl3m4Z4 d dl5m6Z6 d dl'm7Z7m8Z8 d dl9m: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@ d dlmAZA d dl1mBZB dZCG dd deZDd d! ZEd"d# ZFd$d% ZGd&ZHd'd( ZIdS ))    N)continue_trace)reraise)OPSPANDATA)Hub)IntegrationDidNotEnable)ignore_logger)auto_session_tracking)_filter_headersrequest_body_within_bounds)BAGGAGE_HEADER_NAMESOURCE_FOR_STYLETRANSACTION_SOURCE_ROUTE)should_propagate_trace)
capture_internal_exceptionsevent_from_exceptionlogger	parse_urlparse_version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)SimpleNamespace)Any)Dict)Optional)Tuple)Union)ExcInfo)EventProcessor)handler_namemethod_and_path_patternc                   @   s&   e Zd ZdZdddZedd ZdS )	AioHttpIntegrationaiohttpr.   c                 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)selfr4    r6   b/var/www/html/aiguide_backend/venv/lib/python3.10/site-packages/sentry_sdk/integrations/aiohttp.py__init__B   s   
zAioHttpIntegration.__init__c                     s   t t} | d u rtdt| dk rtdtstdt td tjfdd}|t_t	j
fdd	}|t	_
tj  fd
d}|t_d S )NzUnparsable AIOHTTP version: {})      zAIOHTTP 3.4 or newer required.zSThe aiohttp integration for Sentry requires Python 3.7+  or aiocontextvars package.zaiohttp.serverc                    s  t j}|td u r | |g|R i |I d H S t|}t |}t|dd | }|  |	t
| W d    n1 sEw   Y  t|j}t|tjdtd}|j|d|idY z
 | |I d H }	W n0 ty }
 z||
j  d }
~
w tjtfy   |d   ty   tt|  Y nw ||	j |	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)session_modezgeneric AIOHTTP request)opnamesourceaiohttp_request)custom_sampling_context	cancelled)r   currentget_integrationr0   weakrefrefr
   configure_scopeclear_breadcrumbsadd_event_processor_make_request_processordictheadersr   r   HTTP_SERVERr   start_transactionr   set_http_statusstatus_codeasyncioCancelledErrorConnectionResetError
set_status	Exceptionr   _capture_exceptionstatus)r5   r;   argskwargshubweak_requestscoperL   transactionresponsee)
old_handler6   r7   sentry_app_handlec   sX   




"z8AioHttpIntegration.setup_once.<locals>.sentry_app_handlec           	         s    | |I d H }t j}|t}d }z'|jdkrt|j}n|jdkr9| }|dp1|d}d	|j
|}W n	 tyC   Y nw |d urht j }|j|t|j d W d    |S 1 scw   Y  |S )Nr.   r/   path	formatterz{} {})r?   )r   rC   rD   r0   r4   r   handlerget_infogetformatmethodrU   rG   set_transaction_namer   )	r5   r;   rvrZ   integrationr>   
route_infopatternr\   )old_urldispatcher_resolver6   r7   sentry_urldispatcher_resolve   s4   



zCAioHttpIntegration.setup_once.<locals>.sentry_urldispatcher_resolvec                     sZ   t j}|td u r | i |S t|dpd}t }|| ||d<  | i |S )Ntrace_configsr6   )r   rC   rD   r0   listrf   create_trace_configappend)rX   rY   rZ   client_trace_configstrace_config)old_client_session_initr6   r7   init   s   
z+AioHttpIntegration.setup_once.<locals>.init)r   AIOHTTP_VERSIONr   rg   r   r   r	   r   _handler    resolver   r8   )versionra   ro   rw   r6   )rv   r`   rn   r7   
setup_onceK   s*   -
zAioHttpIntegration.setup_onceN)r.   )__name__
__module____qualname__
identifierr8   staticmethodr|   r6   r6   r6   r7   r0   ?   s
    
	r0   c                  C   s2   dd } dd }t  }|j|  |j| |S )Nc           	         s:  t j}|td u rd S |j }d }t  tt|j	dd}W d    n1 s+w   Y  |j
tjd||r;|j	ntf d}|tj| |d|j	 |tj|j |tj|j t|t|j	r||D ]+\}}tdj|||j	d |tkr|jtr|j|  d| 7  < ql||j|< ql||_d S )	NF)sanitizez%s %s)r=   descriptionurlzE[Tracing] Adding `{key}` header {value} to outgoing request to {url}.)keyvaluer   ,)r   rC   rD   r0   rh   upperr   r   strr   
start_spanr   HTTP_CLIENTr   set_datar   HTTP_METHOD
HTTP_QUERYqueryHTTP_FRAGMENTfragmentr   iter_trace_propagation_headersr   debugrg   r   rL   rf   span)	sessiontrace_config_ctxparamsrZ   rh   
parsed_urlr   r   r   r6   r6   r7   on_request_start   s@   

z-create_trace_config.<locals>.on_request_startc                    sD   |j d u rd S |j }|t|jj |d|jj |  d S )Nreason)r   rO   intr^   rW   r   r   finish)r   r   r   r   r6   r6   r7   on_request_end   s   
z+create_trace_config.<locals>.on_request_end)r   r   rs   r   )r   r   ru   r6   r6   r7   rr      s   '
rr   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j	}t
t|j|d< t|||d	< W d    | S 1 sNw   Y  | S )
Nr;   z	%s://%s%sr   query_stringrh   REMOTE_ADDRenvrL   data)r   
setdefaultschemehostrb   r   rh   remoter   rC   r   rK   rL   get_aiohttp_request_data)eventhintr;   request_inforZ   r[   r6   r7   aiohttp_processor  s(   



z2_make_request_processor.<locals>.aiohttp_processorr6   )r[   r   r6   r   r7   rJ      s    rJ   c                 C   s6   t  }t|| jjdddd\}}| j||d |S )Nr1   F)typehandled)client_options	mechanism)r   )sysexc_infor   clientoptionscapture_event)rZ   r   r   r   r6   r6   r7   rV   $  s   
rV   z8[Can't show request body due to implementation details.]c                 C   sJ   |j }|d urt| jt|st S |jpd}||dS |jr#t	S d S )Nzutf-8replace)
_read_bytesr   r   lenr   removed_because_over_size_limitcharsetdecodecan_read_bodyBODY_NOT_READ_MESSAGE)rZ   r;   
bytes_bodyencodingr6   r6   r7   r   3  s   
r   )Jr   rE   sentry_sdk.apir   sentry_sdk._compatr   sentry_sdk.constsr   r   sentry_sdk.hubr   sentry_sdk.integrationsr   r   sentry_sdk.integrations.loggingr	   sentry_sdk.sessionsr
   $sentry_sdk.integrations._wsgi_commonr   r   sentry_sdk.tracingr   r   r   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   r   r   r   r   r   r   r   r   rQ   r1   r   rx   r   r   aiohttp.webr   r   r    ImportErrorsentry_sdk._typesr!   aiohttp.web_requestr"   aiohttp.web_urldispatcherr#   r$   r%   typesr&   typingr'   r(   r)   r*   r+   r,   r-   r2   r0   rr   rJ   rV   r   r   r6   r6   r6   r7   <module>   sT    0 ;%