
    tni1              
          d dl Z d dlZd dlm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mZmZ d dlmZ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mZ d dlmZ erDd 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'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1 	 d dl2m3Z3m4Z5 d dl6m7Z7 d dl0m8Z8 d dl9m:Z: n# e;$ r  ed          w xY we:j<        Z=e3j>        Z?e8j@        ZA	 e3jB        ZCn# eD$ r Y nw xY w G d de          ZE G d de          ZFd>d ZGd>d!ZHd?d$ZBd@d'ZI	 dA	 	 	 	 	 dBd*ZJdCd/ZKd"d.d0eLd1d.d2d.dd3f
d4ZM	 	 	 	 	 	 	 	 	 	 dDd5ZNdEd7ZO eeE          dFd9            ZPdGd=ZQdS )H    N)isawaitable)urlsplit)continue_trace)OP)_check_minimum_versionIntegrationDidNotEnable)RequestExtractor_filter_headers)ignore_logger)TransactionSource)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionHAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGEparse_versionreraise)TYPE_CHECKING)	Container)Any)Callable)Optional)Union)Dict)RequestRequestParameters)BaseHTTPResponse)EventEventProcessorExcInfoHint)Route)Sanic__version__)SanicException)Router)ErrorHandlerzSanic not installedc                   ^    e Zd ZdZde ZdZ edh          f	 	 	 d
dZedd	            Z	dS )SanicIntegrationsanicz
auto.http.Ni  unsampled_statusesOptional[Container[int]]returnc                 0    |pt                      | _        dS )aG  
        The unsampled_statuses parameter can be used to specify for which HTTP statuses the
        transactions should not be sent to Sentry. By default, transactions are sent for all
        HTTP statuses, except 404. Set unsampled_statuses to None to send transactions for all
        HTTP statuses, including 404.
        N)set_unsampled_statuses)selfr,   s     Z/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/sanic.py__init__zSanicIntegration.__init__?   s     $6#>       c                  v   t          t                    t          _        t	          t          t          j                   t
          st          dt          z             t          j        d          rt          d           t          j         t          j        dk     rt                       d S t                       d S )NzUThe sanic integration for Sentry requires Python 3.7+  or the aiocontextvars package.z0.8.root   	   )r   SANIC_VERSIONr*   versionr   r   r	   r   
startswithr   _setup_legacy_sanic_setup_sanic r5   r3   
setup_oncezSanicIntegration.setup_onceJ   s    #0#?#? /1A1IJJJ# 	 24MN  
 #F++ 
	" &!!!#/4D4Lw4V4V!!!Fr5   )r,   r-   r.   Nr.   N)
__name__
__module____qualname__
identifieroriginr<   	frozensetr4   staticmethodrA   r@   r5   r3   r*   r*   :   s        J&*&&FG @Iy#?O?O	?"<	?		? 	? 	? 	?    \  r5   r*   c                   b    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ZdddefdZdS )SanicRequestExtractorr.   c                 P    | j         j        dS t          | j         j                  S )Nr   )requestbodylenr2   s    r3   content_lengthz$SanicRequestExtractor.content_lengthk   s%    <$14<$%%%r5   Dict[str, str]c                 4    t          | j        j                  S N)dictrM   cookiesrP   s    r3   rV   zSanicRequestExtractor.cookiesp   s    DL()))r5   c                     | j         j        S rT   )rM   rN   rP   s    r3   raw_datazSanicRequestExtractor.raw_datas       |  r5   r   c                     | j         j        S rT   )rM   formrP   s    r3   r[   zSanicRequestExtractor.formv   rY   r5   c                     t                      rT   )NotImplementedErrorrP   s    r3   is_jsonzSanicRequestExtractor.is_jsony   s    !###r5   Optional[Any]c                     | j         j        S rT   )rM   jsonrP   s    r3   ra   zSanicRequestExtractor.json|   rY   r5   c                     | j         j        S rT   )rM   filesrP   s    r3   rc   zSanicRequestExtractor.files   s    |!!r5   filer   c                 .    t          |j        pd          S )Nr@   )rO   rN   )r2   rd   s     r3   size_of_filez"SanicRequestExtractor.size_of_file   s    49?###r5   N)r.   rR   )r.   r   )r.   r_   )rC   rD   rE   intrQ   rV   bytesrX   r[   boolr^   ra   rc   rf   r@   r5   r3   rK   rK   j   s        & & & & &
* * * *!% ! ! ! !! ! ! !$ $ $ $ $! ! ! !" " " "$ $3 $ $ $ $ $ $r5   rK   r.   c                  J    t           t          _         t          t          _        d S rT   )_startupr$   _sentry_error_handler_lookupr(   lookupr@   r5   r3   r?   r?      s    EN6Lr5   c                  l    t           t          _        t          t          _        t          t          _        d S rT   )	_legacy_handle_requestr$   handle_request_legacy_router_getr'   getrl   r(   rm   r@   r5   r3   r>   r>      s    1E#FJ6Lr5   r2   r$   c                   K    |                      d          t                      |                      d          t                      |                      d          t                     t	          |            d {V  d S )Nzhttp.lifecycle.requestzhttp.lifecycle.responsezhttp.routing.after)signal_context_enter_context_exit_set_transactionold_startuprP   s    r3   rk   rk      s       *DKK()).999 +DKK)**=999 &DKK$%%&6777 d

r5   rM   r   c                   K   t          j                                        t                    d u| j        _        | j        j        sd S t          j        |           }t          j                    | j        _	        | j        j	        
                                }|                                 |                    t          |                     t          t          | j                  t"          j        | j        t(          j        t          j                  }t          j        |          
                                | j        _        d S )N)opnamesourcerG   )
sentry_sdk
get_clientget_integrationr*   ctx_sentry_do_integrationweakrefrefisolation_scope_sentry_scope	__enter__clear_breadcrumbsadd_event_processor_make_request_processorr   rU   headersr   HTTP_SERVERpathr   URLrG   start_transaction_sentry_transaction)rM   weak_requestscopetransactions       r3   ru   ru      s     //0@AAM K& ;- ;w''L * : < <GKK%//11E		5lCCDDD W_>\ $&  K '1&B' 'ikk K###r5   responseOptional[BaseHTTPResponse]c                 r  K   t                      5  | j        j        s	 d d d            d S t          j                                        t                    }|d n|j        }t                      5  | j        j        	                    |           | j        j        xj
        t          |t                    o||j        vz  c_
        | j        j                            d d d            d d d            n# 1 swxY w Y   | j        j                            d d d            d d d            d S # 1 swxY w Y   d S rT   )r   r   r   r}   r~   r   r*   statusr   set_http_statussampled
isinstancer1   __exit__r   )rM   r   integrationresponse_statuss       r3   rv   rv      s      
%	&	& = ={1 	= = = = = = = = !+--==>NOO"*"2$$ )** 	G 	GK+;;OLLLK+33;(899 K#;+JJ33 K+44T4FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	!**4t<<<%= = = = = = = = = = = = = = = = = =s<   D,AD,0A7C3'D,3C7	7D,:C7	;$D,,D03D0router#   _r   c                 L  K   | j         j        rt                      5  t          j                    }|j                            | j        j        d                              d          }|	                    |t          j                   d d d            d S # 1 swxY w Y   d S d S )N .r|   )r   r   r   r}   get_current_scoper{   replaceappstripset_transaction_namer   	COMPONENT)rM   r   r   r   
route_names        r3   rw   rw      s      {) W(** 	W 	W022E++GK,<bAAGGLLJ&&z:K:U&VVV	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	WW Ws   A-BBB	exceptionargskwargszOptional[object]c                     t          |           t          | |g|R i |d S t          j                                        t
                    S dddt          ddffd}|S )NrM   r   r   r.   r   c                   K   	  | |          }t          |          r| d {V }|t          j        r&t          j        dk    rt          |            d {V  S S S # t          $ r. t          j                    }t          |           t          |  Y nw xY w	 t          j        r't          j        dk    rt          |            d {V  d S d S d S # t          j        r&t          j        dk    rt          |            d {V  w w w xY w)Nr8   )	r   r*   r<   rv   	Exceptionsysexc_info_capture_exceptionr   )rM   r   r   r   old_error_handlers       r3   sentry_wrapped_error_handlerzB_sentry_error_handler_lookup.<locals>.sentry_wrapped_error_handler   so     	-(()<<H8$$ *!)>>>>>>  ' -,<,D,O,O#G,,,,,,,,,,-,O  	 	 	 |~~Hx(((X	   ' -,<,D,O,O#G,,,,,,,,,,,- -,O,O' -,<,D,O,O#G,,,,,,,,,,-,Os#   $A 5BC BC 5D)r   old_error_handler_lookupr}   r~   r   r*   r   )r2   r   r   r   r   r   s        @r3   rl   rl      s     y!!!0yR4RRR6RR t../?@@H  --'0-	- - - - - -* ('r5   c                   K   t          j                                        t                    t	          | |g|R i | d {V S t          j        |          }t          j                    5 }|                                 |	                    t          |                     t	          | |g|R i |}t          |          r| d {V }|cd d d            S # 1 swxY w Y   d S rT   )r}   r~   r   r*   old_handle_requestr   r   r   r   r   r   r   )r2   rM   r   r   r   r   r   s          r3   ro   ro     sI      ../?@@H'gGGGGGGGGGGGGG;w''L		#	%	% !!!!!"9,"G"GHHH%dGEdEEEfEEx   	&%~~~~~~H                 s   ,A CC CUnion[Any, Request]c                 \   t          | g|R  }t          j                                        t                    t                      5  t          j                    }t          j        rt          j        dk    rr| j        j	        j
        }|d         j
        }|                    d|z            r|t          |          dz   d          }|                    |t          j                   n,|                    |d         j        t          j                   d d d            n# 1 swxY w Y   |S )N)r9      r   z%s.   r   )old_router_getr}   r~   r   r*   r   get_isolation_scoper<   r   r   r{   r=   rO   r   r   r   rC   )r2   r   rvr   sanic_app_namesanic_routes         r3   rq   rq     sq   		$t	$	$	$B../?@@L(** 	 	244E' ,<,D,O,O "&!2 ej))%.*@AA I #.c..A.AA.E.G.G"HK**(9(C +     **qEN+<+F +   '	 	 	 	 	 	 	 	 	 	 	 	 	 	 	. Is   CD!!D%(D%Union[ExcInfo, BaseException]c                 Z   t                      5  t          | t          j                    j        ddd          \  }}|r=t          |d         d         d          r!|d         d         j        r	 d d d            d S t          j        ||           d d d            d S # 1 swxY w Y   d S )	Nr+   F)typehandled)client_options	mechanismr   r   quiet)hint)r   r   r}   r~   optionshasattrr   capture_event)r   eventr   s      r3   r   r   3  s#   	$	&	& 
3 
3*%022:&599
 
 
t  	GD,Q/99 	d:>Nq>Q>W 	
3 
3 
3 
3 
3 
3 
3 
3 	 T2222
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3s   A!B =B  B$'B$r   Callable[[], Request]r    c                      d fd}|S )	Nr   r   r   Optional[Hint]r.   Optional[Event]c                    	 |r#t          |d         d         t                    rd S n# t          $ r Y nw xY w             }|| S t                      5  t	          |          }|                    |            | d         }t          |j                  }|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   | S )Nr   r   rM   z://urlquery_stringmethodREMOTE_ADDRenvr   )
issubclassr&   KeyErrorr   rK   extract_into_eventr   r   schemenetlocr   queryr   remote_addrr   rU   r   )r   r   rM   	extractorrequest_infourlpartsr   s         r3   sanic_processorz0_make_request_processor.<locals>.sanic_processorC  s   	 
4
#3A#6GG t 	 	 	D	 ,..?L(** 	M 	M-g66I((/// +L,,H #L ,4>L(%,^L"#0'2E"FL&5d7?6K6K&L&LL#!	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M$ s   #) 
66B DDD)r   r   r   r   r.   r   r@   )r   r   s   ` r3   r   r   B  s)         > r5   rB   )r2   r$   r.   N)rM   r   r.   NrT   )rM   r   r   r   r.   N)rM   r   r   r#   r   r   r.   N)
r2   r   rM   r   r   r   r   r   r.   r   )r2   r   r   r   r.   r   )r   r   r.   N)r   r   r.   r    )Rr   r   inspectr   urllib.parser   r}   r   sentry_sdk.constsr   sentry_sdk.integrationsr   r   r	   $sentry_sdk.integrations._wsgi_commonr
   r   sentry_sdk.integrations.loggingr   sentry_sdk.tracingr   sentry_sdk.utilsr   r   r   r   r   r   r   typingr   collections.abcr   r   r   r   r   r   sanic.requestr   r   sanic.responser   sentry_sdk._typesr   r    r!   r"   sanic.routerr#   r+   r$   r%   r;   sanic.exceptionsr&   r'   sanic.handlersr(   ImportErrorrm   r   rp   r   rr   r   rk   rx   AttributeErrorr*   rK   r?   r>   ru   rv   rw   r   rl   ro   rq   r   r   r@   r5   r3   <module>r      s   



        ! ! ! ! ! !     % % % % % %             U U U U U U U U U U R R R R R R R R 9 9 9 9 9 9 0 0 0 0 0 0                  !           #))))))88888888//////FFFFFFFFFFFF"""""".99999999//////######+++++++ . . .
,,
-
--. (. ) 	.KK 	 	 	D	- - - - -{ - - -`$ $ $ $ $, $ $ $87 7 7 7
7 7 7 7   &   8 BF==">=	= = = =0W W W W!(
!(%!(.3!(?D!(!( !( !( !(H
#,1=B
   &   : ,--3 3 3 .-3           s   "B= =C'C/ /C76C7