
    Dj2                     
   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 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&m'Z'm(Z( 	 d dl)Z)d dl*m+Z, d dl*m-Z-m.Z. d dl/m0Z0m1Z1m2Z2 d dl4m5Z5 e5rFd dl6m7Z7 d dl8m9Z9 d dl*m:Z:m;Z; d dl<m=Z= d dl>m?Z? d dl4m@Z@ d dl4mAZA d dl4mBZB d dl4mCZC d dlmDZD d dlEmFZFmGZG dZH G d de      ZId ZJd  ZKd! ZLd"ZMd# ZNy# e3$ r	  ed      w xY w)$    N)wraps)continue_trace)OP
SPANSTATUSSPANDATA)$_DEFAULT_FAILED_REQUEST_STATUS_CODESIntegrationDidNotEnable)ignore_logger)track_session)_filter_headersrequest_body_within_bounds)BAGGAGE_HEADER_NAMESOURCE_FOR_STYLETRANSACTION_SOURCE_ROUTE)should_propagate_trace)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                   :    e Zd ZdZde Z	 deddZed        Zy)AioHttpIntegrationaiohttpz
auto.http.)failed_request_status_codesc                \    |t         vrt        d|dt         d      || _        || _        y )Nz%Invalid value for transaction_style: z (must be in ))TRANSACTION_STYLE_VALUES
ValueErrortransaction_style_failed_request_status_codes)selfr=   r8   s      cC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/aiohttp.py__init__zAioHttpIntegration.__init__J   s8     $<<$&>@  "3,G)    c                     t        t              } | t        dj                  t                    | dk  rt        d      t        st        dt
        z         t        d       t        j                  fd}|t        _        t        j                  t              fd       }|t        _
        t        j                  t        t              fd       }|t        _        y )	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           	        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"        t        j$                        }t        j&                  |d|i      5  	  | |       d {   }		 	jB                  }|j+                  |       	cd d d        cd d d        cd d d        S 7 #7 B# t(        $ rC}
|j+                  |
j,                         |
j,                  |j.                  v r
t1                 d }
~
wt2        j4                  t6        f$ r! |j9                  t:        j<                          t>        $ r tA        t1                 Y w xY w# tD        $ 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_integrationr6   weakrefrefisolation_scoper   generate_propagation_contextclear_breadcrumbsadd_event_processor_make_request_processordictheadersr   r   HTTP_SERVERr   rL   start_transactionr#   set_http_statusstatus_coder>   _capture_exceptionasyncioCancelledErrorConnectionResetError
set_statusr   	CANCELLED	Exceptionr   statusAttributeError)r?   rG   argskwargsintegrationweak_requestscoperZ   transactionresponseeresponse_status
old_handles               r@   sentry_app_handlez8AioHttpIntegration.setup_once.<locals>.sentry_app_handleq   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7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H+HE% E#
!E%&H2H	H+	I I#E%%	H	.>F,	,AH	 HH	H	H	HH	HHH+"	I +H4	0I 7	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)Nr3   r4   path	formatterz{} {})rK   )rO   rP   rQ   r6   r=   r   handlerget_infogetformatmethodre   get_current_scopeset_transaction_namer   )r?   rG   rvrj   rJ   
route_infopatternold_urldispatcher_resolves          r@   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 )listrx   create_trace_configappend)rh   ri   client_trace_configstrace_configold_client_session_inits       r@   initz+AioHttpIntegration.setup_once.<locals>.init   sN     $(

?(C(Ir#J .0L ''5&:F?#*D;F;;rB   )r   AIOHTTP_VERSIONr
   ry   r   r   r   r"   _handler$   resolver   r    rA   r   r6   )versionrr   r   r   r   rq   r   s       @@@r@   
setup_oncezAioHttpIntegration.setup_onceY   s      0??FFWXXV?@@# .0IJ 
 	&' ((
=	(~ 0$1$9$9!	(	)	 
*	8 !="/"8"8	#$68O	P	< 
Q	< "&rB   N)r3   )	__name__
__module____qualname__
identifierrL   r   rA   staticmethodr   r   rB   r@   r6   r6   F   s@    J*&F )H %I	H E& E&rB   r6   c                      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 )rI   rJ   rL   url)spanzE[Tracing] Adding `{key}` header {value} to outgoing request to {url}.)keyvaluer   ,) rO   rP   rQ   r6   rz   upperr   r   strr   
start_spanr   HTTP_CLIENTr   rL   set_datar   HTTP_METHOD
HTTP_QUERYqueryHTTP_FRAGMENTfragmentr   r{   iter_trace_propagation_headersr   debugry   r   rZ   rx   r   )	sessiontrace_config_ctxparamsrz   
parsed_urlr   clientr   r   s	            r@   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                   K   |j                   y |j                   }|j                  t        |j                  j                               |j                  d|j                  j                         |j                          y w)Nreason)r   r]   intrn   rf   r   r   finish)r   r   r   r   s       r@   on_request_endz+create_trace_config.<locals>.on_request_end  s^       ($$S!7!789h 6 67s   A?B)r!   r   r   r   )r   r   r   s      r@   r   r      sE    -%^ =L!!(()9:&&~6rB   c                       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)
NrG   z://r   query_stringrz   REMOTE_ADDRenvrZ   data)r   
setdefaultschemehostrt   r   rz   remoter   rY   rZ   get_aiohttp_request_data)eventhintrG   request_infork   s       r@   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   )rk   r   s   ` r@   rX   rX   &  s    < rB   c                      t        j                         } t        | t        j                         j
                  ddd      \  }}t        j                  ||       | S )Nr7   F)typehandled)client_options	mechanism)r   )sysexc_infor   rO   rP   optionscapture_event)r   r   r   s      r@   r_   r_   I  sO    ||~H&!,,.66$7KE4
 U.OrB   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   rO   rP   lenr   removed_because_over_size_limitcharsetdecodecan_read_bodyBODY_NOT_READ_MESSAGE)rG   
bytes_bodyencodings      r@   r   r   X  sn    $$J)**?*?*A3z?S!AACC??-g  955$$ rB   )Or   rR   	functoolsr   rO   sentry_sdk.apir   sentry_sdk.constsr   r   r   sentry_sdk.integrationsr   r	   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   r   r   r`   r7   r   r   r    r!   aiohttp.webr"   r#   r$   ImportErrortypingr%   aiohttp.web_requestr&   aiohttp.web_urldispatcherr'   r(   r)   collections.abcr*   typesr+   r,   r-   r.   r/   r0   sentry_sdk._typesr1   r2   r;   r6   r   rX   r_   r   r   r   rB   r@   <module>r      s    
    ) 6 6 
 : - 
 <   062EE !+=F#%(7 G Y& Y&xAH F	 S U	  0
.
//0s   .C4 4D