
    tni,              	          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% n# e&$ r  ed          w xY w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j2        d(d            Z3 ee1          de4de5dd ddfd!            Z6	 	 	 	 d)d%Z7 G d& d'e          Z8dS )*    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                   4    e Zd ZdZde Zedd            ZdS )TornadoIntegrationtornadoz
auto.http.returnNc                     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          _        d S )NzUThe tornado integration for Sentry requires Python 3.7+ or the aiocontextvars packageztornado.accessselfr   argsr   kwargsr$   c                 ~   K   t          |           5   | g|R i | d {V cd d d            S # 1 swxY w Y   d S N_handle_request_impl)r&   r'   r(   old_executes      \/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/tornado.pysentry_execute_request_handlerzETornadoIntegration.setup_once.<locals>.sentry_execute_request_handlerF   s       *$// D D!,T!CD!C!C!CF!C!CCCCCCCD D D D D D D D D D D D D D D D D Ds   266c              ?      K   t          |           5   | g|R i |E d {V }|cd d d            S # 1 swxY w Y   d S r*   r+   )r&   r'   r(   resultr-   s       r.   r/   zETornadoIntegration.setup_once.<locals>.sentry_execute_request_handlerN   s       *$// " "(3D(J4(J(J(J6(J(JJJJJJJF!" " " " " " " " " " " " " " " " " "s   488tyvaluetbzOptional[Any]c                 D    t          |||            | |||g|R 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JJJ6J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CC# 	 g+,  
 	&'''$-'44	 	"D&D/4D@EDD D D D D D D "&"/4"@E"" " " " " Y" #A*8		K		K		K !		K 			K
 		K 		K 		K 		K 		K 		K 		K 		K (<$$$r9   )r$   N)__name__
__module____qualname__
identifieroriginstaticmethodr@    r9   r.   r"   r"   -   sD        J&*&&F3< 3< 3< \3< 3< 3<r9   r"   r&   r   r$   Generator[None, None, None]c              #   J  K   t          j                                        t                    }|d V  t	          j        |           }t          j                    5 }| j        j        }|	                                 t          |          }|                    |           t          |t          j        dt          j        t          j                  }t          j        |d| j        i          5  d V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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scoperV   	processortransactions          r.   r,   r,   h   s     '))99:LMMK;t$$L		#	%	% ,&!!!),77	!!),,,$~
 +$*%,

 

 

 )2CT\1R
 
 
 	 	 EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'                 s7   BD/D 4D D	DD	DDDr2   r3   r4   r   c                     t          |t                    rd S t          | ||ft          j                    j        ddd          \  }}t          j        ||           d S )Nr#   F)r=   handled)client_options	mechanism)hint)
isinstancer   r   rO   rP   optionscapture_event)r2   r3   r4   eventrf   s        r.   r6   r6      sr    %## &	UB!,..6$77  KE4 U......r9   r^   Callable[[], RequestHandler]r    c                      d fd}|S )Nrj   r   rf   dict[str, Any]r$   c                 ,                }|| S |j         }t                      5  t          ||j         j                                                  }t          |          pd| d<   dt          j        i| d<   d d d            n# 1 swxY w Y   t                      5  t          |          }|	                    |            | d         }|j
        d|j        |j        |d<   |j        |d<   |j        |d	<   d
|j        i|d<   t          t!          |j                            |d<   d d d            n# 1 swxY w Y   t%                      rG	 |j        }n# t(          $ r d }Y nw xY w|r*|                     di                               dd           | S )N ra   rL   transaction_inforU   z://urlquery_stringmethodREMOTE_ADDRenvrV   useris_authenticatedT)rU   r   getattrrs   lowerr   r   	COMPONENTTornadoRequestExtractorextract_into_eventprotocolhostpathquery	remote_ipr   dictrV   r   current_user	Exception
setdefault)	rj   rf   handlerrU   rs   	extractorrequest_infor   r^   s	           r.   tornado_processorz0_make_event_processor.<locals>.tornado_processor   sf   ,..?L/(** 	P 	PWgo&<&B&B&D&DEEF#<V#D#D#JE- )13D3N(OE$%	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P
 )** 	M 	M/88I((/// +L    #L ,3=L(%,^L"#0'2C"DL&5d7?6K6K&L&LL#	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M" #$$ 	R$&3 $ $ $#$  R  ,,778JDQQQs7   ABB
BBD44D8;D8E E%$E%)rj   r   rf   rm   r$   r   rG   )r^   r   s   ` r.   rX   rX      s*    & & & & & &P r9   c                   Z    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dS )r{   r$   c                 P    | j         j        dS t          | j         j                  S )Nr   )rU   bodylenr&   s    r.   content_lengthz&TornadoRequestExtractor.content_length   s%    <$14<$%%%r9   Dict[str, str]c                 R    d | j         j                                        D             S )Nc                 $    i | ]\  }}||j         S rG   )r3   .0kvs      r.   
<dictcomp>z3TornadoRequestExtractor.cookies.<locals>.<dictcomp>   s     DDDtq!17DDDr9   )rU   cookiesitemsr   s    r.   r   zTornadoRequestExtractor.cookies   s'    DDt|';'A'A'C'CDDDDr9   c                     | j         j        S r*   )rU   r   r   s    r.   raw_dataz TornadoRequestExtractor.raw_data   s    |  r9   Dict[str, Any]c                 R    d | j         j                                        D             S )Nc                 .    i | ]\  }}|d  |D             S )c                 :    g | ]}|                     d d          S )latin1replace)decode)r   r   s     r.   
<listcomp>z;TornadoRequestExtractor.form.<locals>.<dictcomp>.<listcomp>   s&    :::!9--:::r9   rG   )r   r   vss      r.   r   z0TornadoRequestExtractor.form.<locals>.<dictcomp>   s=     
 
 
2 ::r:::
 
 
r9   )rU   body_argumentsr   r   s    r.   formzTornadoRequestExtractor.form   s4    
 
4::<<
 
 
 	
r9   c                 Z    t          | j        j                            d                    S )Nzcontent-type)r   rU   rV   getr   s    r.   is_jsonzTornadoRequestExtractor.is_json   s#    $T\%9%=%=n%M%MNNNr9   c                 R    d | j         j                                        D             S )Nc                 *    i | ]\  }}|||d          S )r   rG   r   s      r.   r   z1TornadoRequestExtractor.files.<locals>.<dictcomp>   s'    DDDDAq!D1Q4DDDr9   )rU   filesr   r   s    r.   r   zTornadoRequestExtractor.files   s'    DDDL$6$<$<$>$>DDDDr9   filer   c                 .    t          |j        pd          S )NrG   )r   r   )r&   r   s     r.   size_of_filez$TornadoRequestExtractor.size_of_file   s    49?###r9   N)r$   r   )r$   r   )rA   rB   rC   intr   r   bytesr   r   boolr   r   r   rG   r9   r.   r{   r{      s        & & & & &
E E E E!% ! ! ! !
 
 
 
O O O O OE E E E$ $3 $ $ $ $ $ $r9   r{   )r&   r   r$   rH   )r^   rk   r$   r    )9rR   
contextlibinspectr   rO   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   rX   r{   rG   r9   r.   <module>r      s(        ' ' ' ' ' '     ) ) ) ) ) )             4 4 4 4 4 4 0 0 0 0 0 0                V U U U U U U U U U         
 : 9 9 9 9 9077777755555555%%%%%%% 0 0 0
,.
/
//0 !           8      777777778< 8< 8< 8< 8< 8< 8< 8<v    B .//
/4 
/ 
/5 
/T 
/ 
/ 
/ 0/
/+0++ + + +\$ $ $ $ $. $ $ $ $ $s   A+ +A<