
    tni(              	          d dl mZ d dlZd dl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 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 d dlmZ d dlm Z 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(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z4m5Z5m6Z6 d dlm7Z7 d dl8m9Z9 dZ: G d de          Z; G d de	          Z<d*dZ=d*dZ>d+d Z?d*d!Z@d,d%ZA ee;          d&eBd"d#d'd(ddfd)            ZCdS )-    )deepcopyN)OP)DidNotEnableIntegration)SentryAsgiMiddleware)should_send_default_pii)SOURCE_FOR_STYLETransactionSource)ensure_integration_enabledevent_from_exceptiontransaction_from_function)RequestStarliteState)BaseRouteHandler)DefineMiddleware)get_plugin_for_value)	HTTPRoute)ConnectionDataExtractoris_async_callableRef)	BaseModelzStarlite is not installed)TYPE_CHECKING)AnyOptionalUnion)
ASGIAppHintHTTPReceiveMessage	HTTPScopeMessage
MiddlewareReceiveScopeSendWebSocketReceiveMessage)MiddlewareProtocol)Eventzgeneric Starlite requestc                   4    e Zd ZdZde Zedd            ZdS )StarliteIntegrationstarlitez
auto.http.returnNc                  Z    t                       t                       t                       d S )N)patch_app_initpatch_middlewarespatch_http_route_handle     ]/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/starlite.py
setup_oncezStarliteIntegration.setup_once5   s,    !!!!!r2   r,   N)__name__
__module____qualname__
identifieroriginstaticmethodr4   r1   r2   r3   r*   r*   1   sD        J&*&&F" " " \" " "r2   r*   c                   :     e Zd Zej        fdddeddf fdZ xZS )SentryStarliteASGIMiddlewareappr   span_originr,   Nc                 V    t                                          |ddd|d           d S )NFendpointasgi   )r>   unsafe_context_datatransaction_stylemechanism_typer?   asgi_version)super__init__)selfr>   r?   	__class__s      r3   rI   z%SentryStarliteASGIMiddleware.__init__=   sB     	 %(!# 	 	
 	
 	
 	
 	
r2   )r6   r7   r8   r*   r:   strrI   __classcell__)rK   s   @r3   r=   r=   <   s`        1D1K

 



+.

	

 

 

 

 

 

 

 

 

 

r2   r=   r,   c                  z    t           j        t          t                    d	fd            } | t           _        dS )
a  
    Replaces the Starlite class's `__init__` function in order to inject `after_exception` handlers and set the
    `SentryStarliteASGIMiddleware` as the outmost middleware in the stack.
    See:
    - https://starlite-api.github.io/starlite/usage/0-the-starlite-app/5-application-hooks/#after-exception
    - https://starlite-api.github.io/starlite/usage/7-middleware/0-middleware-intro/
    rJ   r   argsr   kwargsr,   Nc                     |                     dg           }|                    t          gt          |t                    r|n|g           |                    d          pg }t          g||d<    | g|R i | d S )Nafter_exception)rR   
middleware)popupdateexception_handler
isinstancelistgetr=   )rJ   rO   rP   rR   rS   old__init__s        r3   injection_wrapperz)patch_app_init.<locals>.injection_wrapperT   s     **%6;;! "/488+OO)* 	 		
 		
 		
 ZZ--3
 <JzJ|D*4***6*****r2   )rJ   r   rO   r   rP   r   r,   N)r   rI   r   r*   )r[   rZ   s    @r3   r.   r.   J   sR     #K 3[AA+ + + + + BA+" *Hr2   c                  z    t           j        t          t                    dfd            } | t           _        d S )NrJ   r   r,   list[Middleware]c                 .    d  |           D             S )Nc                 ,    g | ]}t          |          S r1   )enable_span_for_middleware).0rS   s     r3   
<listcomp>zIpatch_middlewares.<locals>.resolve_middleware_wrapper.<locals>.<listcomp>n   s0     
 
 
 'z22
 
 
r2   r1   )rJ   old_resolve_middleware_stacks    r3   resolve_middleware_wrapperz5patch_middlewares.<locals>.resolve_middleware_wrapperl   s/    
 
::4@@
 
 
 	
r2   )rJ   r   r,   r]   )r   resolve_middlewarer   r*   )rd   rc   s    @r3   r/   r/   i   sT    #3#F  35QRR
 
 
 
 
 SR
 +E'''r2   rS   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__rJ   r'   scopeStarliteScope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:   starlite.middleware_namerO   r   rP   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 Nr8   rm   rp   )
sentry_sdk
get_clientget_integrationr*   
start_spanr   MIDDLEWARE_STARLITE_RECEIVEgetattrrL   r:   set_tag)rO   rP   spanmiddleware_namerj   s      r3   _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r6   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 rs   )rt   ru   rv   r*   rw   r   MIDDLEWARE_STARLITE_SENDry   rL   r:   rz   )r~   r{   r|   rk   s     r3   _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   )rO   r   rP   r   r,   rq   )r~   r!   r,   N)rt   ru   rv   r*   rK   r6   rw   r   MIDDLEWARE_STARLITEr:   rz   ry   rL   )rJ   rh   rj   rk   middleware_spanr}   receive_namereceive_patchednew_receiver   	send_namesend_patchednew_sendr|   old_calls     ``         @r3   _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   )
rJ   r'   rh   ri   rj   r#   rk   r%   r,   N)hasattrr=   rW   r   rS   rg   r6   )rS   r   not_yet_patchedr   s      @r3   r`   r`   v   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 )NrJ   r   rh   r    rj   r#   rk   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 )Nr>   )rh   rj   rk   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        t                    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sourcerA   )r   transactiontransaction_info)rY   lenr   ro   rW   fnr   valuer   r	   _DEFAULT_TRANSACTION_NAMEr
   ROUTErU   r   )
r   r   r   request_infofunctx_nametx_infoextracted_request_datarequest_datarh   s
          r3   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!-',M,c22 ($'-$'3D99!1*!=>G >3#%6%<=LL'55#*(/    Lr2   )r   r(   r   r   r,   r(   )rt   ru   rv   r*   get_isolation_scoperequest_classr   rT   r9   _nameadd_event_processor)rJ   rh   rj   rk   sentry_scoper   r   r   r   r   
old_handles    `      @@r3   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!	 !	 !	 !	 !	 !	 !	 !	F 1;((999ZeWd;;;;;;;;;r2   )
rJ   r   rh   r    rj   r#   rk   r%   r,   N)r   handle)r   r   s    @r3   r0   r0      sb    !J7<7<"-7<8A7<IO7<	7< 7< 7< 7< 7< 7<r &Ir2   rh   ri   Optional[dict[str, Any]]c                 t   |                      d          }|sd S t          |t                    r|S t          |t                    r|                                S t	          |d          r|                                S t          |          }|r)t          |j                  s|                    |          S d S )Nuserasdict)	rY   rW   dictr   r   r   r   r   to_dict)rh   
scope_userplugins      r3   retrieve_user_from_scoper     s    6""J t*d## *i(( !   z8$$ #  """!*--F *'77 *~~j)))4r2   excr   r   c                 ^   d }t                      rt          |          }|r=t          |t                    r(t	          j                    }|                    |           t          | t	          j                    j	        t          j        dd          \  }}t	          j        ||           d S )NF)typehandled)client_options	mechanism)hint)r   r   rW   r   rt   r   set_userr   ru   optionsr*   r9   capture_event)r   rh   r   	user_infor   r   r   s          r3   rV   rV     s    ,0I   4,U33	 )Z	400 )!577i(((&!,..6.9eLL  KE4 U......r2   r5   )rS   r"   r,   r"   )rh   ri   r,   r   )Dcopyr   rt   sentry_sdk.constsr   sentry_sdk.integrationsr   r   sentry_sdk.integrations.asgir   sentry_sdk.scoper   sentry_sdk.tracingr	   r
   sentry_sdk.utilsr   r   r   r+   r   r   r   starlite.handlers.baser   starlite.middlewarer   starlite.plugins.baser   starlite.routes.httpr   starlite.utilsr   r   r   pydanticr   ImportErrortypingr   r   r   r   starlite.typesr   r   r   r    r!   r"   r#   r$   ri   r%   r&   r'   sentry_sdk._typesr(   r   r*   r=   r.   r/   r`   r0   r   	ExceptionrV   r1   r2   r3   <module>r      s{                         = = = = = = = = = = = = = = 4 4 4 4 4 4 B B B B B B B B         	41111111111777777444444::::::......NNNNNNNNNN""""""" 4 4 4
,2
3
334 !           (++++++++++                        ,+++++'''''' 7 " " " " "+ " " "
 
 
 
 
#7 
 
 
* * * *>
E 
E 
E 
EI I I IX<& <& <& <&~   $ /00/9 /_ / /T / / / 10/ / /s   2A+ +A<