
    tni-                        d dl m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 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 d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ n# e%$ r  e	d          w xY wd dl&m'Z' e'r2d dl&m(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z4m5Z5m6Z6 d dlm7Z7 d dl8m9Z9m:Z: dZ; G d de
          Z< G d de          Z=d*dZ>d*dZ?d+d"Z@d*d#ZAd,d'ZB ee<          d(eCd$d%ddfd)            ZDdS )-    )Set)deepcopyN)OP)$_DEFAULT_FAILED_REQUEST_STATUS_CODESDidNotEnableIntegration)SentryAsgiMiddleware)ignore_logger)should_send_default_pii)TransactionSourceSOURCE_FOR_STYLE)ensure_integration_enabledevent_from_exceptiontransaction_from_function)RequestLitestar)BaseRouteHandler)DefineMiddleware)	HTTPRoute)ConnectionDataExtractor)HTTPExceptionzLitestar is not installed)TYPE_CHECKING)AnyOptionalUnion)ASGIApp)HTTPReceiveMessage	HTTPScopeMessage
MiddlewareReceiveScopeSendWebSocketReceiveMessage)MiddlewareProtocol)EventHintzgeneric Litestar requestc                   F    e Zd ZdZde Zef	 	 	 d	dZed
d            ZdS )LitestarIntegrationlitestarz
auto.http.failed_request_status_codesSet[int]returnNc                     || _         d S )N)r+   )selfr+   s     ]/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/litestar.py__init__zLitestarIntegration.__init__8   s     ,G(((    c                  x    t                       t                       t                       t          d           d S )Nr*   )patch_app_initpatch_middlewarespatch_http_route_handler
    r2   r0   
setup_oncezLitestarIntegration.setup_once>   s<    !!! 	j!!!!!r2   )r+   r,   r-   Nr-   N)	__name__
__module____qualname__
identifieroriginr   r1   staticmethodr8   r7   r2   r0   r)   r)   4   sx        J&*&&F 3WG%/G 
G G G G " " " \" " "r2   r)   c                   J     e Zd Zej        fdddeddf fdZdeddfdZ xZ	S )	SentryLitestarASGIMiddlewareappr   span_originr-   Nc                 V    t                                          |ddd|d           d S )NFendpointasgi   )rB   unsafe_context_datatransaction_stylemechanism_typerC   asgi_version)superr1   )r/   rB   rC   	__class__s      r0   r1   z%SentryLitestarASGIMiddleware.__init__P   sB     	 %(!# 	 	
 	
 	
 	
 	
r2   excc                     dS )zAvoid catching exceptions from request handlers.

        Those exceptions are already handled in Litestar.after_exception handler.
        We still catch exceptions from application lifespan handlers.
        Nr7   )r/   rN   s     r0   _capture_request_exceptionz7SentryLitestarASGIMiddleware._capture_request_exception\   s	     	r2   )
r:   r;   r<   r)   r>   strr1   	ExceptionrP   __classcell__)rM   s   @r0   rA   rA   O   s        1D1K

 



+.

	

 

 

 

 

 

i D        r2   rA   r-   c                  z    t           j        t          t                    d	fd            } | t           _        dS )
a\  
    Replaces the Litestar class's `__init__` function in order to inject `after_exception` handlers and set the
    `SentryLitestarASGIMiddleware` as the outmost middleware in the stack.
    See:
    - https://docs.litestar.dev/2/usage/applications.html#after-exception
    - https://docs.litestar.dev/2/usage/middleware/using-middleware.html
    r/   r   argsr   kwargsr-   Nc                     t           g|                    d          pg |d<   |                    d          pg }t          g||d<    | g|R i | d S )Nafter_exception
middleware)exception_handlergetrA   )r/   rU   rV   rY   old__init__s       r0   injection_wrapperz)patch_app_init.<locals>.injection_wrappero   s     %
jj*++1r%
 !
 ZZ--3
 <JzJ|D*4***6*****r2   )r/   r   rU   r   rV   r   r-   N)r   r1   r   r)   )r]   r\   s    @r0   r4   r4   e   sR     #K 3[AA+ + + + + BA+ *Hr2   c                  z    t           j        t          t                    dfd            } | t           _        d S )Nr/   r   r-   list[Middleware]c                 .    d  |           D             S )Nc                 ,    g | ]}t          |          S r7   )enable_span_for_middleware).0rY   s     r0   
<listcomp>zIpatch_middlewares.<locals>.resolve_middleware_wrapper.<locals>.<listcomp>   s0     
 
 
 'z22
 
 
r2   r7   )r/   old_resolve_middleware_stacks    r0   resolve_middleware_wrapperz5patch_middlewares.<locals>.resolve_middleware_wrapper   s/    
 
::4@@
 
 
 	
r2   )r/   r   r-   r_   )r   resolve_middlewarer   r)   )rf   re   s    @r0   r5   r5   }   sT    #3#F  35QRR
 
 
 
 
 SR
 +E'''r2   rY   r    c                    t          | d          r	| t          u r| S t          | t                    r| j        j        n| j        	 	 	 	 	 	 	 	 	 	 dfd}j        dv}|r)t          | t                    r|| j        _        n|| _        | S )N__call__r/   r%   scopeLitestarScopereceiver!   sendr#   r-   c                 R  K   t          j                                        t                     | |           d {V S | j        j        t          j        t          j        t          j	                  5 }|
                    d           	 	 	 	 	 	 dfd}t          d	t                              }|d
k    }|s|n}dfd}	t          d	t                              }
|
dk    }|s|	n} | |||           d {V cd d d            S # 1 swxY w Y   d S )Nopnamer>   litestar.middleware_namerU   r   rV   r-   2Union[HTTPReceiveMessage, WebSocketReceiveMessage]c            
        K   t          j                                        t                     | i | d {V S t          j        t
          j        t          dt                              t          j	                  5 }|
                    d            | i | d {V cd d d            S # 1 swxY w Y   d S Nr<   ro   rr   )
sentry_sdk
get_clientget_integrationr)   
start_spanr   MIDDLEWARE_LITESTAR_RECEIVEgetattrrQ   r>   set_tag)rU   rV   spanmiddleware_namerl   s      r0   _sentry_receivezNenable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_receive   s$      (**::;NOOW!($!9&!9!99999999*5 .#g,,GG.5   : LL!;_MMM!($!9&!9!9999999: : : : : : : : : : : : : : : : : :s   $B55B9<B9r:   r   messager   c           
        K   t          j                                        t                     |            d {V S t          j        t
          j        t          dt                              t          j	                  5 }|
                    d            |            d {V cd d d            S # 1 swxY w Y   d S ru   )rv   rw   rx   r)   ry   r   MIDDLEWARE_LITESTAR_SENDr{   rQ   r>   r|   )r   r}   r~   rm   s     r0   _sentry_sendzKenable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_send   s     (**::;NOOW!%g.......*2 ~s4yyAA.5   / LL!;_MMM!%g....../ / / / / / / / / / / / / / / / / /s   'B;;B?B?r   )rU   r   rV   r   r-   rs   )r   r   r-   N)rv   rw   rx   r)   rM   r:   ry   r   MIDDLEWARE_LITESTARr>   r|   r{   rQ   )r/   rj   rl   rm   middleware_spanr   receive_namereceive_patchednew_receiver   	send_namesend_patchednew_sendr~   old_calls     ``         @r0   _create_span_callz5enable_span_for_middleware.<locals>._create_span_call   s       ""223FGGO!$w=========.1"% &-
 
 
 )	F ##$>PPP::(-:E: : : : : : : #7JGEEL*.??O1@M//gK	/ 	/ 	/ 	/ 	/ 	/ 	/  j#d))<<I$6L+7A||TH!${HEEEEEEEES)	F )	F )	F )	F )	F )	F )	F )	F )	F )	F )	F )	F )	F )	F )	F )	F )	F )	Fs   =BDD #D )r   )
r/   r%   rj   rk   rl   r!   rm   r#   r-   N)hasattrrA   
isinstancer   rY   ri   r:   )rY   r   not_yet_patchedr   s      @r0   rb   rb      s    J
++555*.// '(3<&3F"3F3F 3F 	3F
 
3F 3F 3F 3F 3F 3Fj '/DDO 4j"233 	4->J!**"3Jr2   c                  X    t           j        	 	 	 	 	 	 	 	 	 	 dfd
} | t           _        d S )Nr/   r   rj   r   rl   r!   rm   r#   r-   c                   	K   t          j                                        t                     
| ||           d {V S t          j                    }d                             ||          } t          dd          |                              d          }| d {V 	d	fd}t          j        |_	        |
                    |            
| ||           d {V S )NrB   )rj   rl   rm   T)
parse_bodyparse_querybodyeventr&   _r'   r-   c                    	                     d          }|                      di           }t          	                     dd                    |d<   t                      rd         |d<   |d<   d }|j        |j        }n)t	          |j        d          r|j        j        }n|j        }|t          |          }d	t          d
         i}|st          }d	t          j        i}|                     t          |          ||d           | S )Nroute_handlerrequest_bodyr2   content_lengthcookiesdatavaluesourcerE   )r   transactiontransaction_info)r[   lenr   rq   r   fnr   r   r   _DEFAULT_TRANSACTION_NAMEr   ROUTEupdater   )
r   r   r   request_infofunctx_nametx_infoextracted_request_datarequest_datarj   s
          r0   event_processorzHpatch_http_route_handle.<locals>.handle_wrapper.<locals>.event_processor   s.   !IIo66M 99Y33L-07C1H1H-I-IL)*&(( L*@*KY'''3V$D!-',)733 ($'-$'3D99!1*!=>G >3#%6%<=LL'55#*(/    Lr2   )r   r&   r   r'   r-   r&   )rv   rw   rx   r)   get_isolation_scoperequest_classr   popr=   _nameadd_event_processor)r/   rj   rl   rm   sentry_scoper   r   r   r   r   
old_handles    `      @@r0   handle_wrapperz/patch_http_route_handle.<locals>.handle_wrapper   sJ       ""223FGGO#D%$?????????!577',U|'A'At (B (
 (
"
!8"
 "
 "

" " &))&11!zzzzzz"	 "	 "	 "	 "	 "	 "	 "	H 1;((999ZeWd;;;;;;;;;r2   )
r/   r   rj   r   rl   r!   rm   r#   r-   N)r   handle)r   r   s    @r0   r6   r6      sb    !J8<8<"-8<8A8<IO8<	8< 8< 8< 8< 8< 8<t &Ir2   rj   rk   Optional[dict[str, Any]]c                     |                      d          }t          |t                    r|S t          |d          r|                                S d S )Nuserasdict)r[   r   dictr   r   )rj   
scope_users     r0   retrieve_user_from_scoper     sT    6""J*d## z8$$ #  """4r2   rN   c                    d }t                      rt          |          }|r=t          |t                    r(t	          j                    }|                    |           t          | t                    r=t	          j                    	                    t                    }|| j        |j        vrd S t          | t	          j                    j        t          j        dd          \  }}t	          j        ||           d S )NF)typehandled)client_options	mechanism)hint)r   r   r   r   rv   r   set_userr   rw   rx   r)   status_coder+   r   optionsr=   capture_event)rN   rj   	user_infor   integrationr   r   s          r0   rZ   rZ      s    ,0I   4,U33	 )Z	400 )!577i(((#}%%  +--==>QRR#{'NNNF&!,..6.9eLL  KE4 U......r2   r9   )rY   r    r-   r    )rj   rk   r-   r   )Ecollections.abcr   copyr   rv   sentry_sdk.constsr   sentry_sdk.integrationsr   r   r   sentry_sdk.integrations.asgir	   sentry_sdk.integrations.loggingr
   sentry_sdk.scoper   sentry_sdk.tracingr   r   sentry_sdk.utilsr   r   r   r*   r   r   litestar.handlers.baser   litestar.middlewarer   litestar.routes.httpr   litestar.data_extractorsr   litestar.exceptionsr   ImportErrortypingr   r   r   r   litestar.types.asgi_typesr   litestar.typesr   r   r   r    r!   r"   rk   r#   r$   r%   sentry_sdk._typesr&   r'   r   r)   rA   r4   r5   rb   r6   r   rR   rZ   r7   r2   r0   <module>r      s                                       
 > = = = = = 9 9 9 9 9 9 4 4 4 4 4 4 B B B B B B B B         4********777777444444......@@@@@@1111111 4 4 4
,2
3
334 !           .++++++++++111111	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 766666--------6 " " " " "+ " " "6    #7   ,* * * *0
E 
E 
E 
EI I I IX=& =& =& =&@    /00/9 /_ / / / / 10/ / /s   &A- -A>