a
    xd                     @   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mZ d dl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mZ W n e y   edY n0 d dl!m"Z" e"rVd 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+ d dl'm,Z, d dl'm-Z- d dlm.Z. d dl!m/Z/ dZ0G dd deZ1dd Z2dd Z3dZ4dd  Z5dS )!    N)reraise)Hub)IntegrationDidNotEnable)ignore_logger)_filter_headersrequest_body_within_bounds)SOURCE_FOR_STYLETransaction)capture_internal_exceptionsevent_from_exceptiontransaction_from_functionHAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGEAnnotatedValue)__version__)ApplicationHTTPExceptionUrlDispatcherzAIOHTTP not installed)MYPY)Request)AbstractMatchInfo)Any)Dict)Optional)Tuple)Callable)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)selfr&    r(   W/var/www/html/Ranjet/env/lib/python3.9/site-packages/sentry_sdk/integrations/aiohttp.py__init__4   s    zAioHttpIntegration.__init__c               	      s   z t tttdd d } W n$ ttfyD   tdtY n0 | dk rVtdt	sftdt
 td tj  fdd	}|t_tjfd
d}|t_d S )N.   zAIOHTTP version unparsable: {})      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 r2 | |g|R i |I d H S t|}t |<}| &}|  |t	| W d    n1 s|0    Y  t
j|jddd}|j|d|id z | |I d H }W nt ty }	 z||	j  W Y d }	~	nLd }	~	0  tjtfy   |d  Y n  ty4   tt|  Y n0 ||j |W  d    W  d    S 1 sj0    Y  W d    n1 s0    Y  d S )Nzhttp.serverzgeneric AIOHTTP request)opnameZaiohttp_request)Zcustom_sampling_contextZ	cancelled)r   currentget_integrationr"   weakrefrefconfigure_scopeZclear_breadcrumbsZadd_event_processor_make_request_processorr
   Zcontinue_from_headersheadersZstart_transactionr   Zset_http_statusstatus_codeasyncioZCancelledErrorConnectionResetErrorZ
set_status	Exceptionr   _capture_exceptionstatus)
r'   requestargskwargshubweak_requestscopeZtransactionresponsee)
old_handler(   r)   sentry_app_handleU   s8    

,
z8AioHttpIntegration.setup_once.<locals>.sentry_app_handlec           	         s    | |I d H }t j}|t}d }zN|jdkr<t|j}n4|jdkrp| }|dp`|d}d	|j
|}W n ty   Y n0 |d urt j $}|j|t|j d W d    n1 s0    Y  |S )Nr    r!   path	formatterz{} {})source)r   r1   r2   r"   r&   r   handlerget_infogetformatmethodr;   r5   Zset_transaction_namer	   )	r'   r>   rvrA   Zintegrationr0   Z
route_infopatternrC   )old_urldispatcher_resolver(   r)   sentry_urldispatcher_resolve   s(    


$zCAioHttpIntegration.setup_once.<locals>.sentry_urldispatcher_resolve)tuplemapintAIOHTTP_VERSIONsplit	TypeErrorr%   r   rN   r   r   r   r   _handler   resolve)versionrG   rS   r(   )rF   rR   r)   
setup_once=   s&     )zAioHttpIntegration.setup_onceN)r    )__name__
__module____qualname__
identifierr*   staticmethodr]   r(   r(   r(   r)   r"   1   s   
	r"   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    n1 s0    Y  | S )
Nr>   z	%s://%s%surlquery_stringrO   ZREMOTE_ADDRenvr7   data)r   
setdefaultschemehostrH   rd   rO   remoter   r1   r   dictr7   get_aiohttp_request_data)eventhintr>   Zrequest_inforA   rB   r(   r)   aiohttp_processor   s"    


,z2_make_request_processor.<locals>.aiohttp_processorr(   )rB   rp   r(   ro   r)   r6      s     r6   c                 C   s6   t  }t|| jjdddd\}}| j||d |S )Nr#   F)typeZhandled)Zclient_optionsZ	mechanism)rn   )sysexc_infor   clientoptionsZcapture_event)rA   rs   rm   rn   r(   r(   r)   r<      s    
r<   z8[Can't show request body due to implementation details.]c                 C   sd   |j }|d urVt| jt|s@tddddt|ggt|dS |jpHd}||dS |jr`tS d S )N z!configxr   )remlenzutf-8replace)	Z_read_bytesr   rt   ry   r   charsetdecodeZcan_read_bodyBODY_NOT_READ_MESSAGE)rA   r>   Z
bytes_bodyencodingr(   r(   r)   rl      s    
rl   )6rr   r3   Zsentry_sdk._compatr   Zsentry_sdk.hubr   Zsentry_sdk.integrationsr   r   Zsentry_sdk.integrations.loggingr   Z$sentry_sdk.integrations._wsgi_commonr   r   Zsentry_sdk.tracingr	   r
   Zsentry_sdk.utilsr   r   r   r   r   r   r9   r#   r   rW   Zaiohttp.webr   r   r   ImportErrorZsentry_sdk._typesr   Zaiohttp.web_requestr   Zaiohttp.abcr   typingr   r   r   r   r   r   r   r   r$   r"   r6   r<   r}   rl   r(   r(   r(   r)   <module>   s@    	p%