
    Dj*                        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 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  e r2d dlm!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z-m.Z.m/Z/ d dlm0Z0 d dl1m2Z2m3Z3 dZ4 G d de      Z5 G d de      Z6d Z7d Z8d Z9d Z:d Z; ee5      d        Z<y# e$ r	  ed      w xY w)     N)OP)DidNotEnableIntegration)SentryAsgiMiddleware)ignore_logger)should_send_default_pii)SOURCE_FOR_STYLETRANSACTION_SOURCE_ROUTE)ensure_integration_enabledevent_from_exceptiontransaction_from_function)RequestLitestar)BaseRouteHandler)DefineMiddleware)	HTTPRoute)ConnectionDataExtractorzLitestar is not installed)TYPE_CHECKING)AnyOptionalUnion)ASGIApp)HTTPReceiveMessage	HTTPScopeMessage
MiddlewareReceiveScopeSendWebSocketReceiveMessage)MiddlewareProtocol)EventHintzgeneric Litestar requestc                   *    e Zd ZdZde Zed        Zy)LitestarIntegrationlitestarz
auto.http.c                  V    t                t                t                t        d       y )Nr&   )patch_app_initpatch_middlewarespatch_http_route_handler        dC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/litestar.py
setup_oncezLitestarIntegration.setup_once0   s      	! 	j!r,   N)__name__
__module____qualname__
identifieroriginstaticmethodr.   r+   r,   r-   r%   r%   ,   s%    J*&F" "r,   r%   c                   6     e Zd Zej                  f fd	Z xZS )SentryLitestarASGIMiddlewarec                 .    t         |   |ddd|       y )NFendpointasgi)appunsafe_context_datatransaction_stylemechanism_typespan_origin)super__init__)selfr:   r>   	__class__s      r-   r@   z%SentryLitestarASGIMiddleware.__init__C   s&     	 %(!# 	 	
r,   )r/   r0   r1   r%   r3   r@   __classcell__)rB   s   @r-   r6   r6   B   s    (;(B(B 	
 	
r,   r6   c                  l    t         j                  t        t              fd       } | t         _        y)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
    c                     t         g|j                  d      xs g |d<   t        j                  t        _        |j                  d      xs g }t        g||d<    | g|i | y )Nafter_exception
middleware)exception_handlergetr6   
_run_asgi3__call__)rA   argskwargsrG   old__init__s       r-   injection_wrapperz)patch_app_init.<locals>.injection_wrapperZ   su     %
jj*+1r%
 !
 1M0W0W$-ZZ-3
 <JzJ|D*4*6*r,   N)r   r@   r   r%   )rO   rN   s    @r-   r(   r(   O   s5     ##K 3[A
+ B
+ *Hr,   c                  l    t         j                  t        t              fd       } | t         _        y )Nc                 L     |       D cg c]  }t        |       c}S c c}w )N)enable_span_for_middleware)rA   rG   old_resolve_middleware_stacks     r-   resolve_middleware_wrapperz5patch_middlewares.<locals>.resolve_middleware_wrappern   s/    
 ;4@
 'z2
 	
 
s   !)r   resolve_middlewarer   r%   )rT   rS   s    @r-   r)   r)   j   s7    #3#F#F  35QR
 S
 +E'r,   c                    t        | d      r| t        u r| S t        | t              r| j                  j
                  n| j
                  fd}j                  dv}|r*t        | t              r|| j                  _        | S || _        | S )NrK   c                 4  K   t        j                         j                  t               | |       d {   S | j                  j
                  t        j                  t        j                  t        j                        5 }|j                  d       fd}t        dt                    }|dk(  }|s|n}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namer3   litestar.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Nr1   rX   r[   )
sentry_sdk
get_clientget_integrationr%   
start_spanr   MIDDLEWARE_LITESTAR_RECEIVEgetattrstrr3   set_tag)rL   rM   spanmiddleware_namereceives      r-   _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?r/   ri   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r]   )r^   r_   r`   r%   ra   r   MIDDLEWARE_LITESTAR_SENDrc   rd   r3   re   )messagerf   rg   sends     r-   _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./ / / // /rj   ro   )r^   r_   r`   r%   rB   r/   ra   r   MIDDLEWARE_LITESTARr3   re   rc   rd   )rA   scoperh   rn   middleware_spanri   receive_namereceive_patchednew_receivero   	send_namesend_patchednew_sendrg   old_calls     ``         @r-   _create_span_callz5enable_span_for_middleware.<locals>._create_span_call   s      "223FGO!$w===..11""%% &--
 )	F ##$>P
: #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A/D:D
;D>D
DDD)rz   )hasattrr6   
isinstancer   rG   rK   r/   )rG   rz   not_yet_patchedry   s      @r-   rR   rR   y   s     J
+55*./((11&&/Fb ''/DDOj"23->J!!*  #4Jr,   c                  F    t         j                  fd} | t         _        y )Nc                   	K   t        j                         j                  t               
| ||       d {   S t        j                         }d   j                  ||      } t        dd      |      j                  d      }| d {   		fd}t        j                  |_	        |j                  |        
| ||       d {   S 7 7 F7 w)Nr:   )rq   rh   rn   T)
parse_bodyparse_querybodyc                    	j                  d      }| j                  di       }t        	j                  dd            |d<   t               rd   |d<   |d<   d }|j                  |j                  }n9t	        |j
                  d      r|j
                  j                  }n|j
                  }|t        |      }d	t        d
   i}st        }d	t        i}| j                  |||d       | S )Nroute_handlerrequest_bodyr,   content_lengthcookiesdatavaluesourcer8   )r   transactiontransaction_info)rI   lenr   rZ   r{   fnr   r   r	   _DEFAULT_TRANSACTION_NAMEr
   update)
event_r   request_infofunctx_nametx_infoextracted_request_datarequest_datarq   s
          r-   event_processorzHpatch_http_route_handle.<locals>.handle_wrapper.<locals>.event_processor   s    !IIo6M 99Y3L-07C1H-IL)*&(*@*KY'''3V$D!!-',,))73$''--$''3D9!1*!=>G3#%=>LL+#*(/ Lr,   )r^   r_   r`   r%   get_isolation_scoperequest_classr   popr2   _nameadd_event_processor)rA   rq   rh   rn   sentry_scoper   r   r   r   r   
old_handles    `      @@r-   handle_wrapperz/patch_http_route_handle.<locals>.handle_wrapper   s       "223FGO#D%$???!557,,,t - 
"
!8"

" &))&1!z#	J 1;;((9eWd;;;k @ "T <s4   6C CAC C?C CC C C )r   handle)r   r   s    @r-   r*   r*      s    !!J8<t &Ir,   c                     | j                  d      }t        |t              r|S t        |d      r|j	                         S y )Nuserasdict)rI   r|   dictr{   r   )rq   
scope_users     r-   retrieve_user_from_scoper     s<    6"J*d#z8$  ""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   r|   r   r^   r   set_userr   r_   optionsr%   r2   capture_event)excrq   	user_infor   r   r   s         r-   rH   rH     s     I ,U3	Z	40!557i(&!,,.66.99eLKE4 U.r,   )=r^   sentry_sdk.constsr   sentry_sdk.integrationsr   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   ImportErrortypingr   r   r   r   litestar.types.asgi_typesr   litestar.typesr   r   r   r   r   r   LitestarScoper   r    r!   sentry_sdk._typesr"   r#   r   r%   r6   r(   r)   rR   r*   r   rH   r+   r,   r-   <module>r      s       = = 9 4 I 4*74.@ !++1	 	 	 7-6 "+ ",

#7 

*6EFR>&B /0/ 1/w  4
2
334s    C C