
    \j2                     *   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* 	 d dl+Z+d dl,m-Z. d dl,m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl6m7Z7 e7rFd 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ZJ G d de      ZKd$dZL	 	 	 	 d%d ZMd&d!ZNd"ZO	 	 	 	 d'd#ZPy# e5$ r	  ed      w xY w)(    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                   J    e Zd ZdZde Z	 deddeddddfd	Zedd
       Z	y)AioHttpIntegrationaiohttpz
auto.http.)failed_request_status_codestransaction_styler:   zSet[int]returnNc                \    |t         vrt        d|dt         d      || _        || _        y )Nz%Invalid value for transaction_style: z (must be in ))TRANSACTION_STYLE_VALUES
ValueErrorr;   _failed_request_status_codes)selfr;   r:   s      I/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/aiohttp.py__init__zAioHttpIntegration.__init__K   s8     $<<$&>@  "3,G)    c                     t        t              } t        t        |        t        st        dt        z         t        d       t        j                  	 	 	 	 	 	 	 	 	 	 dfd}|t        _	        t        j                  t              	 	 	 	 	 	 dfd       }|t        _        t        j                  t        t              dfd       }|t        _        y )	NzSThe aiohttp integration for Sentry requires Python 3.7+  or aiocontextvars package.zaiohttp.serverc           	        K   t        j                         j                  t              }| | |g|i | d {   S t	        j
                  |      }t        j                         5 }t        |d      5  |j                          |j                          |j                  t        |             t        |j                        }t        |t        j                   dt"        j$                  t        j&                        }t        j(                  |d|i      5  	  | |       d {   }		 	jD                  }|j-                  |       	cd d d        cd d d        cd d d        S 7 -7 B# t*        $ rC}
|j-                  |
j.                         |
j.                  |j0                  v r
t3                 d }
~
wt4        j6                  t8        f$ r! |j;                  t<        j>                          t@        $ r tC        t3                 Y w xY w# tF        $ r Y w xY w# 1 sw Y   nxY w	 d d d        n# 1 sw Y   nxY wd d d        y # 1 sw Y   y xY ww)Nrequest)session_modezgeneric AIOHTTP request)opnamesourceoriginaiohttp_request)custom_sampling_context)$
sentry_sdk
get_clientget_integrationr8   weakrefrefisolation_scoper   generate_propagation_contextclear_breadcrumbsadd_event_processor_make_request_processordictheadersr   r   HTTP_SERVERr   ROUTErM   start_transactionr%   set_http_statusstatus_coderA   _capture_exceptionasyncioCancelledErrorConnectionResetError
set_statusr   	CANCELLED	Exceptionr   statusAttributeError)rB   rH   argskwargsintegrationweak_requestscoper[   transactionresponseeresponse_status
old_handles               rC   sentry_app_handlez8AioHttpIntegration.setup_once.<locals>.sentry_app_handlej   s&     %//1AABTUK"'gGGGGG";;w/L++- 5("5yA 4( 668++---.El.ST"7??3G"0>> 7066188#K $55#1BG0L #(;-7g-F'FH&	I
 /7ooO (77H'G#( #(#4( 4(5( 5(	 H6 (G, 	"'77F !"#.#K#K!L !3 4! ' 6 68LM "'22:3G3GH!( ; $%7%9:;  . ! !=#( #( #(#4( 4( 4(5( 5( 5(s   :IE*-I+I
9B#H5HE/*E-
+E/0H<H	H5	I
 I-E//	H	8>F6	6AH	
HH	H	H	HH	HH($H5,	I
5H>	:I
	I
IIc                 (  K    | |       d {   }t        j                         j                  t              }||S d }	 |j                  dk(  rt        |j                        }n_|j                  dk(  rP|j                         }|j                  d      xs |j                  d      }dj                  |j                  |      }|6t        j                         j                  |t        |j                            |S 7 # t        $ r Y Gw xY ww)Nr5   r6   path	formatterz{} {})rL   )rP   rQ   rR   r8   r;   r   handlerget_infogetformatmethodrg   get_current_scopeset_transaction_namer   )rB   rH   rvrl   rK   
route_infopatternold_urldispatcher_resolves          rC   sentry_urldispatcher_resolvezCAioHttpIntegration.setup_once.<locals>.sentry_urldispatcher_resolve   s     1w??B$//1AABTUK"	D00NB4RZZ@D 226OO!#J(nnV4S
{8SG">>'..'BD ,,.CC+K,I,IJ D 
 I1 @  s4   DD1DBD ;D	DDDDc                      t        |j                  d      xs d      }t               }|j                  |       ||d<    | i |S )Ntrace_configs )listrz   create_trace_configappend)rj   rk   client_trace_configstrace_configold_client_session_inits       rC   initz+AioHttpIntegration.setup_once.<locals>.init   sL    #'

?(C(Ir#J .0L ''5&:F?#*D;F;;rE   )
rB   r.   rH   r(   rj   r.   rk   r.   r<   r.   )rB   r&   rH   r(   r<   r)   )rj   r.   rk   r.   r<   N)r   AIOHTTP_VERSIONr	   r8   r   r   r   r   r$   _handler&   resolver   r"   rD   r   )versionrt   r   r   r   rs   r   s       @@@rC   
setup_oncezAioHttpIntegration.setup_onceY   s    017;# .0IJ 
 	&' ((
>	(>	("+>	(49>	(EJ>	(>	(@ 0$1$9$9!	(	)	!	,5	"	 
*	: !="/"8"8	#$68O	P	< 
Q	< "&rE   )r5   )r<   N)
__name__
__module____qualname__
identifierrM   r   strrD   staticmethodr   r   rE   rC   r8   r8   G   s_    J*&F "0H 3W	HH &0	H
 
H & &rE   r8   c                      	 	 	 	 	 	 	 	 dd} 	 	 	 	 	 	 	 	 dd}t               }|j                  j                  |        |j                  j                  |       |S )Nc                   K   t        j                         j                  t              y |j                  j                         }d }t               5  t        t        |j                        d      }d d d        t        j                  t        j                  |d|r|j                  nt        t        j                        }|j                  t         j"                  |       |p|j                  d|j                         |j                  t         j$                  |j&                         |j                  t         j(                  |j*                         t        j                         }t-        |t        |j                              rt        j.                         j1                  |      D ]  \  }}t3        j4                  dj7                  |||j                               |t8        k(  r:|j:                  j=                  t8              r|j:                  |xx   d	|z   z  cc<   z||j:                  |<    ||_        y # 1 sw Y   xY ww)
NF)sanitize )rJ   rK   rM   url)spanzE[Tracing] Adding `{key}` header {value} to outgoing request to {url}.)keyvaluer   ,) rP   rQ   rR   r8   r|   upperr   r   r   r   
start_spanr   HTTP_CLIENTr   rM   set_datar   HTTP_METHOD
HTTP_QUERYqueryHTTP_FRAGMENTfragmentr   r}   iter_trace_propagation_headersr   debugr{   r   r[   rz   r   )	sessiontrace_config_ctxparamsr|   
parsed_urlr   clientr   r   s	            rC   on_request_startz-create_trace_config.<locals>.on_request_start   s    
   "223EFN$$&
(* 	D"3vzz?UCJ	D $$~~z~~9RRT%,,	
 	h**F3!MM%0MM(--z/?/?@MM(00*2E2EF&&(!&#fjj/: --/NN O 0  [bbu&** c 
 --&..2D2D'3 NN3'3;6'*/FNN3'#0& !%K	D 	Ds   AI!I2GIIIc                 Z  K   |j                   y |j                   }|j                  t        |j                  j                               |j                  d|j                  j                         |j                          t               5  t        |       d d d        y # 1 sw Y   y xY ww)Nreason)
r   r_   intrp   rh   r   r   finishr   r   )r   r   r   r   s       rC   on_request_endz+create_trace_config.<locals>.on_request_end  s     
   ($$S!7!789h 6 67(* 	*#D)	* 	* 	*s   BB+
B	B+B($B+)r   r"   r   r-   r   r*   r<   N)r   r"   r   r-   r   r+   r<   N)r#   r   r   r   )r   r   r   s      rC   r   r      s    0% 0%+0% *0% 
	0%d* *+* (* 
	*  =L!!(()9:&&~6rE   c                       	 	 	 	 	 	 d fd}|S )Nc                            }|| S t               5  | j                  di       }|j                  d|j                  |j                  |d<   |j
                  |d<   |j                  |d<   d|j                  i|d<   t        t        |j                              |d<   t        |      |d	<   d d d        | S # 1 sw Y   | S xY w)
NrH   z://r   query_stringr|   REMOTE_ADDRenvr[   data)r   
setdefaultschemehostrv   r   r|   remoter   rZ   r[   get_aiohttp_request_data)eventhintrH   request_inform   s       rC   aiohttp_processorz2_make_request_processor.<locals>.aiohttp_processor*  s     .?L(* 	E ++Ir:L #L ,3+?+?L(%,^^L"#0'.."AL&5d7??6K&LL#
 $<G#DL #	E& '	E& s   BB<<C)r   r3   r   z*dict[str, Tuple[type, BaseException, Any]]r<   r3   r   )rm   r   s   ` rC   rY   rY   '  s*    : 
: rE   c                      t        j                         } t        | t        j                         j
                  ddd      \  }}t        j                  ||       | S )Nr9   F)typehandled)client_options	mechanism)r   )sysexc_infor   rP   rQ   optionscapture_event)r   r   r   s      rC   ra   ra   J  sO    ||~H&!,,.66$7KE4
 U.OrE   z8[Can't show request body due to implementation details.]c                     | j                   }|]t        t        j                         t	        |            st        j                         S | j                  xs d}|j                  |d      S | j                  rt        S y )Nzutf-8replace)_read_bytesr   rP   rQ   lenr    removed_because_over_size_limitcharsetdecodecan_read_bodyBODY_NOT_READ_MESSAGE)rH   
bytes_bodyencodings      rC   r   r   X  sp     $$J)**?*?*A3z?S!AACC??-g  955$$ rE   )r<   r#   )rm   zweakref.ReferenceType[Request]r<   r4   )r<   r2   )rH   r(   r<   z$Union[Optional[str], AnnotatedValue])Qr   rS   	functoolsr   rP   sentry_sdk.apir   sentry_sdk.constsr   r   r   sentry_sdk.integrationsr   r	   r
   r   sentry_sdk.integrations.loggingr   sentry_sdk.sessionsr   $sentry_sdk.integrations._wsgi_commonr   r   sentry_sdk.tracingr   r   r   sentry_sdk.tracing_utilsr   r   sentry_sdk.utilsr   r   r   r   r   r   r   r   r   r   r   r    rb   r9   r!   r   r"   r#   aiohttp.webr$   r%   r&   ImportErrortypingr'   aiohttp.web_requestr(   aiohttp.web_urldispatcherr)   r*   r+   collections.abcr,   typesr-   r.   r/   r0   r1   r2   sentry_sdk._typesr3   r4   r?   r8   r   rY   ra   r   r   r   rE   rC   <module>r      s   
    ) 6 6  : - 
 U   062EE !+=F#%(7 G R& R&jHV 2  F S +S	  0
.
//0s   2D D