
    Dj<                     8   d dl Z d dlZ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 d dlmZmZmZmZmZmZ 	 d d	l mZ 	 d dlmc 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* d dl+m,Z, e,r0d dl+m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl#m6Z6 d dl7m8Z8m9Z9m:Z: d dl;m<Z<m=Z=  ed        G d de      Z>d Z? G d de      Z@ G d de@      ZAd ZBd  ZCd! ZDd" ZEd# ZFy# e$ r	  e	d
      w xY w# e$ r	  e	d      w xY w# e$ r dZ(dZ*Y w xY w)$    Nisawaitable)OP)IntegrationDidNotEnable)ignore_logger)should_send_default_pii)TRANSACTION_SOURCE_COMPONENT)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionloggerpackage_version_get_installed_modules)cached_propertyz;strawberry-graphql integration requires Python 3.8 or newer)Schema)SchemaExtension)should_skip_tracing)async_base_viewsync_base_viewz#strawberry-graphql is not installed)SentryTracingExtensionSentryTracingExtensionSync)TYPE_CHECKING)AnyCallable	GeneratorListOptionalUnion)GraphQLErrorGraphQLResolveInfo)GraphQLHTTPResponse)ExecutionContextExecutionResultSubscriptionExecutionResult)EventEventProcessorzstrawberry.executionc                   2    e Zd ZdZde ZddZed        Zy)StrawberryIntegration
strawberryzauto.graphql.Nc                 N    |dvrt        dj                  |            || _        y )N)NFTz6Invalid value for async_execution: "{}" (must be bool))
ValueErrorformatasync_execution)selfr.   s     fC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/strawberry.py__init__zStrawberryIntegration.__init__@   s3    "55HOO# 
  /    c                      t        d      } | t        dj                  |             | dk  rt        d      t                t	                t                y )Nzstrawberry-graphqlz)Unparsable strawberry-graphql version: {})r         z-strawberry-graphql 0.209.5 or newer required.)r   r   r-   _patch_schema_init_patch_execute_patch_views)versions    r0   
setup_oncez StrawberryIntegration.setup_onceJ   sV     ""67?;BB7K  [ NOOr2   N)__name__
__module____qualname__
identifieroriginr1   staticmethodr:    r2   r0   r)   r)   <   s,    JZL)F/  r2   r)   c                  v    t         j                  t        j                        fd       } | t         _        y )Nc                    t        j                         j                  t              }| | g|i |S |j	                  d      xs g }|j
                  |j
                  }n*t        |      }t        j                  d|rdnd|rdnd       |D cg c]  }|t        t        fvr| }}|j                  |rt        nt               ||d<    | g|i |S c c}w )N
extensionszfAssuming strawberry is running %s. If not, initialize it as StrawberryIntegration(async_execution=%s).asyncsyncFalseTrue)
sentry_sdk
get_clientget_integrationr)   getr.   _guess_if_using_asyncr   infoStrawberrySentryAsyncExtensionStrawberrySentrySyncExtensionappendSentryAsyncExtensionSentrySyncExtension)r/   argskwargsintegrationrE   should_use_async_extension	extensionold_schema_inits          r0   _sentry_patched_schema_initz7_patch_schema_init.<locals>._sentry_patched_schema_init`   s     !++-==>ST"49$9&99ZZ-3
&&2)4)D)D& *?z)J&KKx5656 (
24QRS 

 
 	$> DW	
  *|t5d5f55
s   C)r   r1   	functoolswraps)r[   rZ   s    @r0   r6   r6   \   s1    ooO___%#6 &#6J 2FOr2   c                   R    e Zd ZdddZed        Zd Zd Zd Zd Z	d	 Z
d
 Zd Zy)rS   Nexecution_contextc                    |r|| _         y y r;   r_   )r/   r`   s     r0   r1   zSentryAsyncExtension.__init__   s     %6D" r2   c                     | j                  | j                  j                        }| j                  j                  r&dj	                  | j                  j                  |      S |S )Nz{}:{})
hash_queryr`   queryoperation_namer-   )r/   
query_hashs     r0   _resource_namez#SentryAsyncExtension._resource_name   sP     __T%;%;%A%AB
!!00>>$"8"8"G"GTTr2   c                 f    t        j                  |j                  d            j                         S )Nzutf-8)hashlibmd5encode	hexdigest)r/   rd   s     r0   rc   zSentryAsyncExtension.hash_query   s#    {{5<<01;;==r2   c              #   ^  K   | j                   j                  | _        d}t        j                  }| j                   j
                  d| j                   _        | j                   j
                  j                         j                  d      rd}t        j                  }nE| j                   j
                  j                         j                  d      rd}t        j                  }|}| j                  r|dj                  | j                        z  }t        j                  d| j                  |d       t        j                         }|r(|j                  ||t        j                   	      | _        n+t        j$                  ||t        j                   	      | _        | j"                  j'                  d
|       | j"                  j'                  d| j                         | j"                  j'                  d| j                   j
                         | j"                  j'                  d| j(                         d  | j"                  j*                  }|rC| j                   j                  r-| j                   j                  |_        t.        |_        ||_        | j"                  j5                          y w)Nrd    mutationsubscriptionz {}zgraphql.operation)re   operation_type)categorydataopnamer@   zgraphql.operation.typezgraphql.operation.namezgraphql.documentzgraphql.resource_name)r`   re   _operation_namer   GRAPHQL_QUERYrd   strip
startswithGRAPHQL_MUTATIONGRAPHQL_SUBSCRIPTIONr-   rJ   add_breadcrumbget_current_spanstart_childr)   r@   graphql_span
start_spanset_datarg   containing_transactionrv   r
   sourceru   finish)r/   rq   ru   descriptionspantransactions         r0   on_operationz!SentryAsyncExtension.on_operation   s'    #55DD !!''/+-D""(!!''--/:::F'N$$B##))//1<<^L+N((B$5<<(<(<==K!!("&"6"6"0	
 **, $ 0 0 ,33 !1 !D !+ 5 5 ,33!D 	""#;^L""#;T=Q=QR""#5t7M7M7S7ST""#:D<O<OP''>>411@@#55DDK!=KKN  "s   J+J-c              #      K   | j                   j                  t        j                  dt        j
                        | _        d  | j                  j                          y w)N
validationrt   )r   r   r   GRAPHQL_VALIDATEr)   r@   validation_spanr   r/   s    r0   on_validatez SentryAsyncExtension.on_validate   sP     #00<<""(//  =  
 	##%   AA!c              #      K   | j                   j                  t        j                  dt        j
                        | _        d  | j                  j                          y w)Nparsingrt   )r   r   r   GRAPHQL_PARSEr)   r@   parsing_spanr   r   s    r0   on_parsezSentryAsyncExtension.on_parse   sP      --99(// : 
 	  "r   c                     t        ||      S r;   )strawberry_should_skip_tracing)r/   _nextrO   s      r0   r   z(SentryAsyncExtension.should_skip_tracing   s    -eT::r2   c                 V   K    |||g|i |}t        |      r
| d {   }|S 7 wr;   r   )r/   r   rootrO   rU   rV   results          r0   _resolvezSentryAsyncExtension._resolve   s5     tT3D3F3v!\F "s   )')c                   K   | j                  ||      r  | j                  |||g|i | d {   S dj                  |j                  |j                        }| j
                  j                  t        j                  dj                  |      t        j                        5 }|j                  d|j                         |j                  d|j                  j                         |j                  d|       |j                  ddj                  t        t        |j                   j#                                             | j                  |||g|i | d {   cd d d        S 7 97 # 1 sw Y   y xY ww	Nz{}.{}zresolving {}rt   zgraphql.field_namezgraphql.parent_typezgraphql.field_pathzgraphql.path.)r   r   r-   parent_type
field_namer   r   r   GRAPHQL_RESOLVEr)   r@   r   rv   joinmapstrpathas_listr/   r   r   rO   rU   rV   
field_pathr   s           r0   resolvezSentryAsyncExtension.resolve   sC    ##E40&udDJ4J6JJJ^^D$4$4dooF
**!!&&z2(// + 
 
	K MM.@MM/1A1A1F1FGMM.
;MM.#((3sDII<M<M<O3P*QR&udDJ4J6JJ
	K 
	K	 K K
	K 
	Ks;   .E:E)A3E:$B7E.E,E.E:,E..E73E:)r<   r=   r>   r1   r   rg   rc   r   r   r   r   r   r   rB   r2   r0   rS   rS      sE     7  >8#t
&
#;Kr2   rS   c                       e Zd Zd Zy)rT   c                    | j                  ||      r |||g|i |S dj                  |j                  |j                        }| j                  j                  t        j                  dj                  |      t        j                        5 }|j                  d|j                         |j                  d|j                  j                         |j                  d|       |j                  ddj                  t        t        |j                  j!                                             |||g|i |cd d d        S # 1 sw Y   y xY wr   )r   r-   r   r   r   r   r   r   r)   r@   r   rv   r   r   r   r   r   r   s           r0   r   zSentrySyncExtension.resolve  s   ##E40t5d5f55^^D$4$4dooF
**!!&&z2(// + 
 
	6 MM.@MM/1A1A1F1FGMM.
;MM.#((3sDII<M<M<O3P*QRt5d5f5
	6 
	6 
	6s   B(EE
N)r<   r=   r>   r   rB   r2   r0   rT   rT     s    6r2   rT   c                      t         j                  t         j                  fd} t        t              fd       }| t         _        |t         _        y )Nc                     K    | i | d {   }t        j                         j                  t              |S d|v r3t        j                         }t        |d         }|j                  |       |S 7 fwNr`   )rJ   rK   rL   r)   get_isolation_scope_make_request_event_processoradd_event_processor)rU   rV   r   scopeevent_processorold_execute_asyncs        r0   _sentry_patched_execute_asyncz5_patch_execute.<locals>._sentry_patched_execute_async.  sw     ($9&99  "223HIQM&(224E;FCV<WXO%%o6 :s   A8A6A'A8c                       | i |}d|v r3t        j                         }t        |d         }|j                  |       |S r   )rJ   r   r   r   )rU   rV   r   r   r   old_execute_syncs        r0   _sentry_patched_execute_syncz4_patch_execute.<locals>._sentry_patched_execute_sync<  sM     "4262&(224E;FCV<WXO%%o6r2   )strawberry_schemaexecuteexecute_syncr   r)   )r   r   r   r   s     @@r0   r7   r7   )  sR    )11(55   57GH	 I	 !>%A"r2   c                     t         j                  j                  t        j                  j                  fd} fd}t        t              d        | t         j                  _        |t        j                  _        y )Nc                 .     | ||        | ||       y r;   rB   )r/   errorsresponse_data_sentry_patched_handle_errorsold_async_view_handle_errorss      r0   (_sentry_patched_async_view_handle_errorsz>_patch_views.<locals>._sentry_patched_async_view_handle_errorsQ  s    $T6=A%dFMBr2   c                 .     | ||        | ||       y r;   rB   )r/   r   r   r   old_sync_view_handle_errorss      r0   '_sentry_patched_sync_view_handle_errorsz=_patch_views.<locals>._sentry_patched_sync_view_handle_errorsV  s    #D&-@%dFMBr2   c           	      b   |sy t        j                         }t        |      }|j                  |       t	               5  |D ]W  }t        |t        j                         j                  t        j                  dd      \  }}t        j                  ||       Y 	 d d d        y # 1 sw Y   y xY w)NF)typehandled)client_options	mechanism)hint)rJ   r   _make_response_event_processorr   r   r   rK   optionsr)   r?   capture_event)r/   r   r   r   r   erroreventr   s           r0   r   z3_patch_views.<locals>._sentry_patched_handle_errors[  s     ..08G!!/2(* 
	; 	;2#-#8#8#:#B#B 5 @ @#(t ((T:	;
	; 
	; 
	;s   AB%%B.)r   AsyncBaseHTTPView_handle_errorsr   SyncBaseHTTPViewr   r)   )r   r   r   r   r   s     @@@r0   r8   r8   L  ss    #2#D#D#S#S "0"A"A"P"PC
C
   56; 7;, 	1 %%4 	0 ##2r2   c                       fd}|S )Nc                 x   t               5  t               rr| j                  di       }d|d<   |j                  d      sQdj                  i}j
                  rj
                  |d<   j                  rj                  |d<   ||d<   n	 | d   d= d d d        | S # t        t        f$ r Y w xY w# 1 sw Y   | S xY w)Nrequestgraphql
api_targetrs   rd   	variablesoperationName)	r   r	   
setdefaultrM   rd   r   re   KeyError	TypeError)r   r   request_datars   r`   s       r0   innerz,_make_request_event_processor.<locals>.inner|  s    (* 	&($//	2>-6\*#''/#%6%<%<=D(22,=,G,G[)(770A0P0P_-+/L(i(0#	*  !), %	* s*   A=B/
BB,)B/+B,,B//B9rB   )r`   r   s   ` r0   r   r   y  s    2 Lr2   c                       fd}|S )Nc                     t               5  t               r| j                  di       }di|d<   d d d        | S # 1 sw Y   | S xY w)Ncontextsrs   response)r   r	   r   )r   r   r   r   s      r0   r   z-_make_response_event_processor.<locals>.inner  sN    (* 	?&( ++J;(.'>$	?
 	?
 s	   $:ArB   )r   r   s   ` r0   r   r     s     Lr2   c                 h    t         | v ryt        | v ryt        h dt        t	                     z        S )NTF>   fastapilitestarstarlite	starlette)rP   rQ   boolsetr   )rE   s    r0   rN   rN     s6    %3	&*	483?U?W;XX r2   )Gr\   ri   inspectr   rJ   sentry_sdk.constsr   sentry_sdk.integrationsr   r   sentry_sdk.integrations.loggingr   sentry_sdk.scoper	   sentry_sdk.tracingr
   sentry_sdk.utilsr   r   r   r   r   r   r   ImportErrorstrawberry.schema.schemaschemar   r*   r   strawberry.extensionsr   #strawberry.extensions.tracing.utilsr   r   strawberry.httpr   r   strawberry.extensions.tracingr   rP   r   rQ   typingr   r   r   r   r   r   r   r   r    r!   r"   strawberry.typesr#   r$   r%   sentry_sdk._typesr&   r'   r)   r6   rS   rT   r7   r8   r   r   rN   rB   r2   r0   <module>r      s#         = 9 4 ; V)>88!5i?) !FF83__7 $ %K @*2ZHK? HKV6. 6* BF*Z>	c  V
 T
UUV  >
<
==>  )%)"$(!)s*   C+ #C< /D +C9<D
	DD