
    Dj                         d dl Z d dl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mZmZmZ d dlmZ er"d d	lmZmZmZmZ d d
lmZmZ d dlmZ d dlmZmZ 	 d dlZ	 d dl!m"Z"m#Z# d dl!m$Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+ 	 d dl,Z,dZ- G d de      Z.d Z/d Z0d Z1 G d de      Z2d Z3 ee.      d        Z4d Z5y# e $ r dZY cw xY w# e $ r	  ed      w xY w# e $ r	  ed      w xY w)    N)DidNotEnableIntegration)DEFAULT_HTTP_METHODS_TO_CAPTURERequestExtractor)SentryWsgiMiddleware)should_send_default_pii)SOURCE_FOR_STYLE)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionpackage_version)TYPE_CHECKING)AnyCallableDictUnion)EventEventProcessor)_ScopedResponse)FileStorageImmutableMultiDict)FlaskRequest)request)before_render_templategot_request_exceptionrequest_started)MarkupzFlask is not installedzblinker is not installed)endpointurlc                   :    e Zd ZdZde ZdZdefdZed        Z	y)FlaskIntegrationflaskz
auto.http. r   c                     |t         vrt        d|dt         d      || _        t        t	        t
        j                  |            | _        y )Nz%Invalid value for transaction_style: z (must be in ))TRANSACTION_STYLE_VALUES
ValueErrortransaction_styletuplemapstrupperhttp_methods_to_capture)selfr)   r.   s      aC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/flask.py__init__zFlaskIntegration.__init__:   sI     $<<$&>@  "3',S<S-T'U$    c                  ,   t        d      } | t        d      | dk  rt        d      t        j                  t               t        j                  t               t        j                  t               t        j                  fd}|t        _
        y )Nr#   zUnparsable Flask version.)r   
   z Flask 0.10 or newer is required.c                 ,    t        j                         j                  t              
  ||      S t        j                         j                  t              }t	         fdt        j
                  |r|j                  nt              } |||      S )Nc                       g| i |S N )akwold_appr/   s     r0   <lambda>zNFlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app.<locals>.<lambda>a   s    !8!8R!8 r2   )span_originr.   )
sentry_sdk
get_clientget_integrationr"   r   originr.   r   )r/   environstart_responseintegration
middlewarer;   s   `    r0   sentry_patched_wsgi_appz<FlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_appY   s    $$&667GHPtWn==$//1AABRSK-8,33 #  778J g~66r2   )r   r   r   connect_add_sentry_tracer   _request_startedr   _capture_exceptionr   __call__)versionrF   r;   s     @r0   
setup_oncezFlaskIntegration.setup_onceH   sx     "'*?:;;WABB&&'89 01%%&89..	7$ 1r2   N)
__name__
__module____qualname__
identifierrA   r)   r   r1   staticmethodrM   r8   r2   r0   r"   r"   4   s;    J*&F % ?V "1 "1r2   r"   c                 |    d|v ry t        j                         }t        |j                               }||d<   ||d<   y )Nsentry_tracesentry_trace_meta)r>   get_current_scoper   trace_propagation_meta)sendertemplatecontextextrascope
trace_metas         r0   rH   rH   n   sC     ((*E4467J(GN#-G r2   c                     	 |j                   j                  |j                   j                  d}| j                  ||   t        |          y # t
        $ r Y y w xY w)N)r    r   )source)url_ruleruler   set_transaction_namer	   	Exception)r\   r)   r   name_for_styles       r0    _set_transaction_name_and_sourcere   y   sg    
##((((11
 	"",-#$56 	# 	
  s   A
A 	AAc                 6   t        j                         j                  t              }|y t	        j
                         }t        t        j                         |j                  |       t        j                         }t        | ||      }|j                  |       y r7   )r>   r?   r@   r"   flask_request_get_current_objectre   rV   r)   get_isolation_scope_make_request_event_processoradd_event_processor)appkwargsrD   r   r\   evt_processors         r0   rI   rI      s    '')99:JKK//1G %$$&(E(Ew **,E1#wLM	m,r2   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
FlaskRequestExtractorc                 .    | j                   j                  S r7   )r   rB   r/   s    r0   envzFlaskRequestExtractor.env       ||###r2   c           	          | j                   j                  j                         D ci c]+  \  }}|t        |t              rt        |      dk(  r|d   n|- c}}S c c}}w )N   r   )r   cookiesitems
isinstancelistlen)r/   kvs      r0   rw   zFlaskRequestExtractor.cookies   sY     ,,224
1 z!T*s1v{qtA
 	
 
s   0Ac                 6    | j                   j                         S r7   )r   get_datarr   s    r0   raw_datazFlaskRequestExtractor.raw_data   s    ||$$&&r2   c                 .    | j                   j                  S r7   )r   formrr   s    r0   r   zFlaskRequestExtractor.form   s    ||   r2   c                 .    | j                   j                  S r7   )r   filesrr   s    r0   r   zFlaskRequestExtractor.files   s    ||!!!r2   c                 .    | j                   j                  S r7   )r   is_jsonrr   s    r0   r   zFlaskRequestExtractor.is_json   rt   r2   c                 :    | j                   j                  d      S )NT)silent)r   get_jsonrr   s    r0   jsonzFlaskRequestExtractor.json   s    ||$$D$11r2   c                     |j                   S r7   )content_length)r/   files     r0   size_of_filez"FlaskRequestExtractor.size_of_file   s    """r2   N)rN   rO   rP   rs   rw   r   r   r   r   r   r   r8   r2   r0   rp   rp      s*    $
'!"$2#r2   rp   c                     fd}|S )Nc                     | S t               5  t              j                  |        d d d        t               r t               5  t	        |        d d d        | S | S # 1 sw Y   5xY w# 1 sw Y   | S xY wr7   )r
   rp   extract_into_eventr   _add_user_to_event)eventhintr   s     r0   innerz,_make_request_event_processor.<locals>.inner   sy     ?L(* 	E!'*==eD	E #$,. *"5)* u	E 	E* s   AA+A(+A5r8   )rl   r   rD   r   s    `  r0   rj   rj      s    $ Lr2   c                     t        |t        j                         j                  ddd      \  }}t        j                  ||       y )Nr#   F)typehandled)client_options	mechanism)r   )r   r>   r?   optionscapture_event)rX   	exceptionrm   r   r   s        r0   rJ   rJ      sA     '!,,.66"u5KE4 U.r2   c                    t         y t         j                  }|y t               5  | j                  di       }	 |j                  d|j	                                	 |j                  d|j                         	 |j                  d|j                         d d d        y # t
        $ r Y Nw xY w# t        $ r Y @w xY w# t        $ r Y 2w xY w# 1 sw Y   y xY w)Nuseridemailusername)	flask_logincurrent_userr
   
setdefaultget_idAttributeErrorr   rc   r   )r   r   	user_infos      r0   r   r      s    ##D|	$	&  $$VR0		  t{{}5 	  $**5	  T]];;   	
 	   		
  		= sd   C	 BB+7B:	B(%C	'B((C	+	B74C	6B77C	:	CC	CC		C)6r>   sentry_sdk.integrationsr   r   $sentry_sdk.integrations._wsgi_commonr   r   sentry_sdk.integrations.wsgir   sentry_sdk.scoper   sentry_sdk.tracingr	   sentry_sdk.utilsr
   r   r   r   typingr   r   r   r   r   sentry_sdk._typesr   r   r   werkzeug.datastructuresr   r   r   ImportErrorr#   r   r   r   rg   flask.signalsr   r   r   
markupsafer   blinkerr'   r"   rH   re   rI   rp   rj   rJ   r   r8   r2   r0   <module>r      s    = > 4 /  !117<G
1$. 
 "3 / 71{ 71t.-&"#, "#J0 ,-/ ./(O  K  1
/
001
  3
1
223s*   B< #C	 C <CC	CC(