
    \j;              	          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 d dl	m
Z
 d dlmZ d dlmZmZmZmZmZ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% d dl'm(Z( e(r&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/m0Z0  G d de      Z1ejd                  d"d       Z3 ee1      de4de5ddddfd       Z6	 	 	 	 d#dZ7 G d  d!e      Z8y# e&$ r	  ed      w xY w)$    N)iscoroutinefunction)continue_trace)OP)should_send_default_pii)TransactionSource)HAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGEensure_integration_enabledevent_from_exceptioncapture_internal_exceptionstransaction_from_function)_check_minimum_versionIntegrationDidNotEnable)RequestExtractor_filter_headers_is_json_content_type)ignore_logger)version_info)RequestHandler	HTTPError)	coroutinezTornado not installed)TYPE_CHECKING)Any)Optional)Dict)Callable)	Generator)EventEventProcessorc                   ,    e Zd ZdZde Zedd       Zy)TornadoIntegrationtornadoz
auto.http.Nc                     t        t        t               t        st	        dt
        z         t        d       t        j                  t              } | r	 	 	 	 	 	 	 	 dfd}nt        	 	 	 	 	 	 	 	 dfd	       }|t        _        t        j                  ddd
t        dt        ddddddddffd}|t        _        y )NzUThe tornado integration for Sentry requires Python 3.7+ or the aiocontextvars packageztornado.accessselfargsr   kwargsreturnc                 z   K   t        |       5   | g|i | d {   cd d d        S 7 # 1 sw Y   y xY wwN_handle_request_impl)r%   r&   r'   old_executes      I/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/tornado.pysentry_execute_request_handlerzETornadoIntegration.setup_once.<locals>.sentry_execute_request_handlerF   sH      *$/ D!,T!CD!CF!CCD DCD Ds    ;/-/
;/8;c              ?   ~   K   t        |       5   | g|i |E d {   }|cd d d        S 7 # 1 sw Y   y xY wwr*   r+   )r%   r&   r'   resultr-   s       r.   r/   zETornadoIntegration.setup_once.<locals>.sentry_execute_request_handlerN   sH      *$/ "(3D(J4(J6(JJF!" "J" "s    =1/1
=1:=tyvaluetbzOptional[Any]c                 <    t        |||        | |||g|i |S r*   )_capture_exception)r%   r2   r3   r4   r&   r'   old_log_exceptions         r.   sentry_log_exceptionz;TornadoIntegration.setup_once.<locals>.sentry_log_exceptionZ   s,     r5"-$T2ubJ4J6JJ    )r%   r   r&   r   r'   r   r(   r   )r   r"   TORNADO_VERSIONr   r   r	   r   r   _executer   r   log_exceptiontypeBaseException)	awaitabler/   r8   r-   r7   s      @@r.   
setup_oncezTornadoIntegration.setup_once1   s   1?C# g+, 
 	&'$--'4	D&D/4D@EDD "&"/4"@E"" " #A*88		K		K		K !		K 			K
 		K 		K 		K (<$r9   )r(   N)__name__
__module____qualname__
identifieroriginstaticmethodr@    r9   r.   r"   r"   -   s%    J*&F3< 3<r9   r"   r(   c              #   T  K   t        j                         j                  t              }|d  y t	        j
                  |       }t        j                         5 }| j                  j                  }|j                          t        |      }|j                  |       t        |t        j                  dt        j                   t        j"                        }t        j$                  |d| j                  i      5  d  d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)Nzgeneric Tornado request)opnamesourcerE   tornado_request)custom_sampling_context)
sentry_sdk
get_clientget_integrationr"   weakrefrefisolation_scoperequestheadersclear_breadcrumbs_make_event_processoradd_event_processorr   r   HTTP_SERVERr   ROUTErE   start_transaction)r%   integrationweak_handlerscoperU   	processortransactions          r.   r,   r,   h   s     '')99:LMK;;t$L		#	#	% ,,&&!),7	!!),$~~
 +$**%,,

 ))2CT\\1R
 	 	' &	 	' s7   AD(B D:D?D	D(D	DD%!D(r2   r3   r4   r   c                     t        |t              ry t        | ||ft        j                         j
                  ddd      \  }}t        j                  ||       y )Nr#   F)r=   handled)client_options	mechanism)hint)
isinstancer   r   rN   rO   optionscapture_event)r2   r3   r4   eventre   s        r.   r6   r6      sR    %#&	UB!,,.66$7KE4 U.r9   c                      d fd}|S )Nc                 *           }|| S |j                   }t               5  t        ||j                   j                  j	                               }t        |      xs d| d<   dt        j                  i| d<   d d d        t               5  t        |      }|j                  |        | d   }|j                  d|j                  |j                  |d<   |j                  |d<   |j                  |d	<   d
|j                  i|d<   t        t!        |j"                              |d<   d d d        t%               r1	 |j&                  }|r"| j+                  di       j+                  dd       | S # 1 sw Y   xY w# 1 sw Y   RxY w# t(        $ r d }Y Kw xY w)N r`   rK   transaction_inforT   z://urlquery_stringmethodREMOTE_ADDRenvrU   useris_authenticatedT)rT   r   getattrrp   lowerr   r   	COMPONENTTornadoRequestExtractorextract_into_eventprotocolhostpathquery	remote_ipr   dictrU   r   current_user	Exception
setdefault)	ri   re   handlerrT   rp   	extractorrequest_infor   r]   s	           r.   tornado_processorz0_make_event_processor.<locals>.tornado_processor   s   .?L//(* 	PWgoo&<&<&B&B&DEF#<V#D#JE- )13D3N3N(OE$%	P
 )* 	M/8I((/ +L   #L ,3==L(%,^^L"#0'2C2C"DL&5d7??6K&LL#	M" #$$&33   ,778JDQ?	P 	P
	M 	M(  $#$s+   AE,BE8:F ,E58FFF)ri   r   re   zdict[str, Any]r(   r   rG   )r]   r   s   ` r.   rW   rW      s    &P r9   c                   X    e Zd ZdefdZddZdefdZddZde	fdZ
ddZdd	defd
Zy)rx   r(   c                 n    | j                   j                  yt        | j                   j                        S Nr   )rT   bodylenr%   s    r.   content_lengthz&TornadoRequestExtractor.content_length   s*    <<$4<<$$%%r9   c                     | j                   j                  j                         D ci c]  \  }}||j                   c}}S c c}}w r*   )rT   cookiesitemsr3   r%   kvs      r.   r   zTornadoRequestExtractor.cookies   s5    '+||';';'A'A'CDtq!177
DDDs   Ac                 .    | j                   j                  S r*   )rT   r   r   s    r.   raw_dataz TornadoRequestExtractor.raw_data   s    ||   r9   c                     | j                   j                  j                         D ci c]&  \  }}||D cg c]  }|j                  dd       c}( c}}}S c c}w c c}}}w )Nlatin1replace)rT   body_argumentsr   decode)r%   r   vsr   s       r.   formzTornadoRequestExtractor.form   s^     44::<
 
2 r:!9-::
 	
:
s   AAAAc                 ^    t        | j                  j                  j                  d            S )Nzcontent-type)r   rT   rU   getr   s    r.   is_jsonzTornadoRequestExtractor.is_json   s"    $T\\%9%9%=%=n%MNNr9   c                     | j                   j                  j                         D ci c]  \  }}|s	||d    c}}S c c}}w r   )rT   filesr   r   s      r.   r   zTornadoRequestExtractor.files   s7    $(LL$6$6$<$<$>DDAq!1Q4DDDs   
??filer   c                 4    t        |j                  xs d      S )NrG   )r   r   )r%   r   s     r.   size_of_filez$TornadoRequestExtractor.size_of_file   s    499?##r9   N)r(   zDict[str, str])r(   zDict[str, Any])rA   rB   rC   intr   r   bytesr   r   boolr   r   r   rG   r9   r.   rx   rx      sL    & &
E!% !
O OE$ $3 $r9   rx   )r%   r   r(   zGenerator[None, None, None])r]   zCallable[[], RequestHandler]r(   r    )9rQ   
contextlibinspectr   rN   sentry_sdk.apir   sentry_sdk.constsr   sentry_sdk.scoper   sentry_sdk.tracingr   sentry_sdk.utilsr   r	   r
   r   r   r   sentry_sdk.integrationsr   r   r   $sentry_sdk.integrations._wsgi_commonr   r   r   sentry_sdk.integrations.loggingr   r#   r   r:   tornado.webr   r   tornado.genr   ImportErrortypingr   r   r   r   r   r   sentry_sdk._typesr   r    r"   contextmanagerr,   r=   r>   r6   rW   rx   rG   r9   r.   <module>r      s     '  )   4 0  V U 
 :075% ! 78< 8<v  D ./
/4 
/ 
/5 
/T 
/ 0
/+0++\$. $S  0
.
//0s   C! !C/