
    \j(              	          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$ 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&       ZCy# e%$ r	  ed      w xY w)*    )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                   ,    e Zd ZdZde Zedd       Zy)StarliteIntegrationstarlitez
auto.http.Nc                  @    t                t                t                y N)patch_app_initpatch_middlewarespatch_http_route_handle     J/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/starlite.py
setup_oncezStarliteIntegration.setup_once5   s    !r2   returnN)__name__
__module____qualname__
identifieroriginstaticmethodr4   r1   r2   r3   r*   r*   1   s%    J*&F" "r2   r*   c                   D     e Zd Zej                  fdddeddf fdZ xZS )SentryStarliteASGIMiddlewareappr   span_originr6   Nc                 0    t         |   |ddd|d       y )NFendpointasgi   )r?   unsafe_context_datatransaction_stylemechanism_typer@   asgi_version)super__init__)selfr?   r@   	__class__s      r3   rJ   z%SentryStarliteASGIMiddleware.__init__=   s)     	 %(!# 	 	
r2   )r7   r8   r9   r*   r;   strrJ   __classcell__)rL   s   @r3   r>   r>   <   s.    1D1K1K



+.

	

 

r2   r>   r6   c                  n    t         j                  t        t              dfd       } | t         _        y)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/
    Nc                     |j                  dg       }|j                  t        gt        |t              r|n|g       |j                  d      xs g }t        g||d<    | g|i | y )Nafter_exception)rQ   
middleware)popupdateexception_handler
isinstancelistgetr>   )rK   argskwargsrQ   rR   old__init__s        r3   injection_wrapperz)patch_app_init.<locals>.injection_wrapperT   s     **%6;! "/48 $)* 	 		
 ZZ-3
 <JzJ|D*4*6*r2   )rK   r   rY   r   rZ   r   r6   N)r   rJ   r   r*   )r\   r[   s    @r3   r.   r.   J   s5     ##K 3[A+ B+" *Hr2   c                  n    t         j                  t        t              dfd       } | t         _        y )Nc                 L     |       D cg c]  }t        |       c}S c c}w r-   )enable_span_for_middleware)rK   rR   old_resolve_middleware_stacks     r3   resolve_middleware_wrapperz5patch_middlewares.<locals>.resolve_middleware_wrapperl   s/     ;4@
 'z2
 	
 
s   !)rK   r   r6   zlist[Middleware])r   resolve_middlewarer   r*   )ra   r`   s    @r3   r/   r/   i   s7    #3#F#F  35QR
 S
 +E'r2   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                  _        | S || _        | S )N__call__c                 D  K   t        j                         j                  t               | |       d {   S | j                  j
                  t        j                  t        j                  t        j                        5 }|j                  d       	 	 	 	 	 	 dfd}t        dt                    }|dk(  }|s|n}d	fd}	t        dt                    }
|
dk(  }|s|	n} | |||       d {   cd d d        S 7 7 # 1 sw Y   y xY ww)
Nopnamer;   starlite.middleware_namec            
        K   t        j                         j                  t               | i | d {   S t        j                  t
        j                  t        dt                    t        j                        5 }|j                  d        | i | d {   cd d d        S 7 x7 # 1 sw Y   y xY wwNr9   rf   ri   )
sentry_sdk
get_clientget_integrationr*   
start_spanr   MIDDLEWARE_STARLITE_RECEIVEgetattrrM   r;   set_tag)rY   rZ   spanmiddleware_namereceives      r3   _sentry_receivezNenable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_receive   s      ((*::;NOW!($!9&!999**55 .#g,G.55 : LL!;_M!($!9&!99: : : :: ::   3B?B/AB?B3!B1"B3%B?1B33B<8B?r7   rv   c           
        K   t        j                         j                  t               |        d {   S t        j                  t
        j                  t        dt                    t        j                        5 }|j                  d        |        d {   cd d d        S 7 x7 # 1 sw Y   y xY wwrk   )rl   rm   rn   r*   ro   r   MIDDLEWARE_STARLITE_SENDrq   rM   r;   rr   )messagers   rt   sends     r3   _sentry_sendzKenable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_send   s     ((*::;NOW!%g..**22 ~s4yA.55 / LL!;_M!%g./ / / // /rw   r|   )rY   r   rZ   r   r6   z2Union[HTTPReceiveMessage, WebSocketReceiveMessage])rz   r!   r6   N)rl   rm   rn   r*   rL   r7   ro   r   MIDDLEWARE_STARLITEr;   rr   rq   rM   )rK   scoperu   r{   middleware_spanrv   receive_namereceive_patchednew_receiver|   	send_namesend_patchednew_sendrt   old_calls     ``         @r3   _create_span_callz5enable_span_for_middleware.<locals>._create_span_call   s0       "223FGO!$w===..11""%% &--
 )	F ##$>P::(-:E: #7JGEL*.??O1@/gK	/  j#d)<I$6L+7|TH!${HEES)	F )	F >X FS)	F )	Fs;   6D DAD A7DDDD DDD )r   )
rK   r'   r~   StarliteScoperu   r#   r{   r%   r6   N)hasattrr>   rV   r   rR   rd   r7   )rR   r   not_yet_patchedr   s      @r3   r_   r_   v   s    J
+55*./(33<<&&3F"3F3F 3F 	3F
 
3Fj ''/DDOj"23->J!!*  #4Jr2   c                  \    t         j                  	 	 	 	 	 	 	 	 	 	 dfd} | t         _        y )Nc                   	K   t        j                         j                  t               
| ||       d {   S t        j                         }d   j                  ||      } t        dd      |      j                  d      }| d {   	d	fd}t        j                  |_	        |j                  |        
| ||       d {   S 7 7 G7 w)Nr?   )r~   ru   r{   T)
parse_bodyparse_querybodyc                    	j                  d      }| j                  di       }t        	j                  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}| j                  t        |      ||d
       | S )Nroute_handlerrequest_bodyr2   content_lengthcookiesdatasourcerB   )r   transactiontransaction_info)rX   lenr   rh   rV   fnr   valuer   r	   _DEFAULT_TRANSACTION_NAMEr
   ROUTErT   r   )
event_r   request_infofunctx_nametx_infoextracted_request_datarequest_datar~   s
          r3   event_processorzHpatch_http_route_handle.<locals>.handle_wrapper.<locals>.event_processor   s   !IIo6M 99Y3L-07C1H-IL)*&(*@*KY'''3V$D!!-',,M,,c2$''--$''3D9!1*!=>G3#%6%<%<=LL'5#*(/ Lr2   )r   r(   r   r   r6   r(   )rl   rm   rn   r*   get_isolation_scoperequest_classr   rS   r:   _nameadd_event_processor)rK   r~   ru   r{   sentry_scoper   r   r   r   r   
old_handles    `      @@r3   handle_wrapperz/patch_http_route_handle.<locals>.handle_wrapper   s        "223FGO#D%$???!557',U|'A'At (B (
"
!8"

" &))&1!z!	F 1;;((9eWd;;;g @ "P <s5   6C!CAC!CA C!CC!C!C!)
rK   r   r~   r    ru   r#   r{   r%   r6   N)r   handle)r   r   s    @r3   r0   r0      sF    !!J7<7<"-7<8A7<IO7<	7<r &Ir2   r~   r   c                 .   | j                  d      }|sy t        |t              r|S t        |t              r|j                         S t	        |d      r|j                         S t        |      }|r&t        |j                        s|j                  |      S y )Nuserasdict)	rX   rV   dictr   r   r   r   r   to_dict)r~   
scope_userplugins      r3   retrieve_user_from_scoper     s    6"J*d#*i(  z8$  ""!*-F'7~~j))r2   excr   r   c                 J   d }t               rt        |      }|r5t        |t              r%t	        j
                         }|j                  |       t        | t	        j                         j                  t        j                  dd      \  }}t	        j                  ||       y )NF)typehandled)client_options	mechanism)hint)r   r   rV   r   rl   r   set_userr   rm   optionsr*   r:   capture_event)r   r~   r   	user_infor   r   r   s          r3   rU   rU     s    ,0I ,U3	Z	40!557i(&!,,.66.99eLKE4 U.r2   r5   )rR   r"   r6   r"   )r~   r   r6   zOptional[dict[str, Any]])Dcopyr   rl   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$   r   r%   r&   r'   sentry_sdk._typesr(   r   r*   r>   r.   r/   r_   r0   r   	ExceptionrU   r1   r2   r3   <module>r      s        = = 4 B 	41174:.NN" !++   ,' 7 "+ "
#7 
*>
EIX<&~$ /0/9 /_ / /T / 1/{  4
2
334s   2C$ $C2