o
    0 iK7                     @   s   d dl Z 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
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 zd d	l mZ W n ey[   ed
w zd dlmZ d dlmZ d dlm Z! d dl"m#Z#m$Z$ W n ey   edw z
d dl%m&Z'm(Z) W n ey   dZ'dZ)Y nw d dl*m+Z+ e+rd dl*m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl"m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 ed G dd de
Z:dd Z;G dd deZ<G dd de<Z=d d! Z>d"d# Z?d$d% Z@d&d' ZAdS )(    Nisawaitable)OP)_check_minimum_versionIntegrationDidNotEnable)ignore_logger)should_send_default_pii)TransactionSource)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)GraphQLErrorGraphQLResolveInfo)GraphQLHTTPResponse)ExecutionContext)EventEventProcessorzstrawberry.executionc                   @   s0   e Zd ZdZde ZdddZedd ZdS )	StrawberryIntegration
strawberryzauto.graphql.Nc                 C   s    |dvrt d||| _d S )N)NFTz6Invalid value for async_execution: "{}" (must be bool))
ValueErrorformatasync_execution)selfr)    r+   n/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/sentry_sdk/integrations/strawberry.py__init__B   s   
zStrawberryIntegration.__init__c                  C   s$   t d} tt| d t  t  d S )Nzstrawberry-graphql)r   r   r%   _patch_schema_init_patch_views)versionr+   r+   r,   
setup_onceL   s   
z StrawberryIntegration.setup_onceN)__name__
__module____qualname__
identifieroriginr-   staticmethodr1   r+   r+   r+   r,   r%   >   s    


r%   c                     s&   t j t  fdd} | t _d S )Nc                    s   t  t}|d u r | g|R i |S |dpg }d }|jd ur(|j}nt|}|d u r9tjddd d}dd |D }|	|rFt
nt ||d<  | g|R i |S )N
extensionszwAssuming strawberry is running sync. If not, initialize the integration as StrawberryIntegration(async_execution=True).   )
stacklevelFc                 S   s   g | ]
}|t tfvr|qS r+   StrawberrySentryAsyncExtensionStrawberrySentrySyncExtension).0	extensionr+   r+   r,   
<listcomp>r   s    zK_patch_schema_init.<locals>._sentry_patched_schema_init.<locals>.<listcomp>)
sentry_sdk
get_clientZget_integrationr%   getr)   _guess_if_using_asyncwarningswarnappendSentryAsyncExtensionSentrySyncExtension)r*   argskwargsZintegrationr9   Zshould_use_async_extensionZold_schema_initr+   r,   _sentry_patched_schema_initZ   s,   

z7_patch_schema_init.<locals>._sentry_patched_schema_init)r   r-   	functoolswraps)rN   r+   rM   r,   r.   V   s   
'r.   c                   @   s^   e Zd ZddddZedd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )rI   Nexecution_contextc                C   s   |r|| _ d S d S r2   rQ   )r*   rR   r+   r+   r,   r-      s   
zSentryAsyncExtension.__init__c                 C   s*   |  | jj}| jjrd| jj|S |S )Nz{}:{})
hash_queryrR   queryoperation_namer(   )r*   Z
query_hashr+   r+   r,   _resource_name   s   z#SentryAsyncExtension._resource_namec                 C   s   t |d S )Nzutf-8)hashlibmd5encode	hexdigest)r*   rT   r+   r+   r,   rS      s   zSentryAsyncExtension.hash_queryc                 c   sf   | j j| _d}tj}| j jd u rd| j _| j j dr$d}tj}n| j j dr2d}tj	}|}| jr?|d
| j7 }tjd| j|dd t }t| j }|| t }|ri|j||tjd	| _n
tj||tjd	| _| jd
| | jd| j | jd| j j | jd| j d V  | jj}|r| j jr| j j|_tj|_||_| j  d S )NrT    ZmutationZsubscriptionz {}zgraphql.operation)rU   operation_type)categorydataopnamer7   zgraphql.operation.typezgraphql.operation.namezgraphql.documentzgraphql.resource_name)rR   rU   Z_operation_namer   ZGRAPHQL_QUERYrT   strip
startswithZGRAPHQL_MUTATIONZGRAPHQL_SUBSCRIPTIONr(   rB   Zadd_breadcrumbget_isolation_scope_make_request_event_processoradd_event_processorZget_current_spanstart_childr%   r7   graphql_spanZ
start_spanset_datarV   Zcontaining_transactionra   r
   Z	COMPONENTsourcer`   finish)r*   r\   r`   descriptionscopeevent_processorspanZtransactionr+   r+   r,   on_operation   s^   




z!SentryAsyncExtension.on_operationc                 c   .    | j jtjdtjd| _d V  | j  d S )NZ
validationr_   )rh   rg   r   ZGRAPHQL_VALIDATEr%   r7   Zvalidation_spanrk   r*   r+   r+   r,   on_validate      z SentryAsyncExtension.on_validatec                 c   rq   )NZparsingr_   )rh   rg   r   ZGRAPHQL_PARSEr%   r7   Zparsing_spanrk   rr   r+   r+   r,   on_parse   rt   zSentryAsyncExtension.on_parsec                 C   s
   t ||S r2   )strawberry_should_skip_tracing)r*   _nextinfor+   r+   r,   r      s   
z(SentryAsyncExtension.should_skip_tracingc                    s0   |||g|R i |}t |r|I d H }|S r2   r   )r*   rw   rootrx   rK   rL   resultr+   r+   r,   _resolve   s
   
zSentryAsyncExtension._resolvec              
      s   |  ||r| j|||g|R i |I d H S d|j|j}| jjtjd|t	j
d=}|d|j |d|jj |d| |ddtt|j  | j|||g|R i |I d H W  d    S 1 snw   Y  d S 	Nz{}.{}zresolving {}r_   zgraphql.field_namezgraphql.parent_typezgraphql.field_pathzgraphql.path.)r   r{   r(   parent_type
field_namerh   rg   r   GRAPHQL_RESOLVEr%   r7   ri   ra   joinmapstrpathas_listr*   rw   ry   rx   rK   rL   Z
field_pathro   r+   r+   r,   resolve   s    " $zSentryAsyncExtension.resolve)r3   r4   r5   r-   r   rV   rS   rp   rs   ru   r   r{   r   r+   r+   r+   r,   rI      s    	
	>	rI   c                   @   s   e Zd Zdd ZdS )rJ   c              
   O   s   |  ||r|||g|R i |S d|j|j}| jjtjd|tj	d8}|
d|j |
d|jj |
d| |
ddtt|j  |||g|R i |W  d    S 1 scw   Y  d S r|   )r   r(   r~   r   rh   rg   r   r   r%   r7   ri   ra   r   r   r   r   r   r   r+   r+   r,   r     s   $zSentrySyncExtension.resolveN)r3   r4   r5   r   r+   r+   r+   r,   rJ     s    rJ   c                     sP   t jjtjj fdd}  fdd}ttdd  | t j_|tj_d S )Nc                       | ||  | || d S r2   r+   r*   errorsresponse_data)_sentry_patched_handle_errorsold_async_view_handle_errorsr+   r,   (_sentry_patched_async_view_handle_errors.     z>_patch_views.<locals>._sentry_patched_async_view_handle_errorsc                    r   r2   r+   r   )r   old_sync_view_handle_errorsr+   r,   '_sentry_patched_sync_view_handle_errors3  r   z=_patch_views.<locals>._sentry_patched_sync_view_handle_errorsc                 S   s   |sd S t  }t|}|| t % |D ]}t|t  jtj	ddd\}}t j
||d qW d    d S 1 s<w   Y  d S )NF)typeZhandled)Zclient_optionsZ	mechanism)hint)rB   rd   _make_response_event_processorrf   r   r   rC   optionsr%   r6   Zcapture_event)r*   r   r   rm   rn   erroreventr   r+   r+   r,   r   8  s"   

"z3_patch_views.<locals>._sentry_patched_handle_errors)r   ZAsyncBaseHTTPViewZ_handle_errorsr   ZSyncBaseHTTPViewr   r%   )r   r   r+   )r   r   r   r,   r/   )  s   

r/   c                        fdd}|S )Nc              
      s   t  X t r0| di }d|d< |ds/d ji} jr# j|d<  jr+ j|d< ||d< nz| d d= W n ttfyB   Y nw W d    | S W d    | S W d    | S 1 s^w   Y  | S )NrequestgraphqlZ
api_targetr^   rT   	variablesZoperationName)	r   r	   
setdefaultrD   rT   r   rU   KeyError	TypeError)r   r   Zrequest_datar^   rQ   r+   r,   innerY  s8   






z,_make_request_event_processor.<locals>.innerr+   )rR   r   r+   rQ   r,   re   V  s   re   c                    r   )Nc                    sZ   t    t r| di }d i|d< W d    | S W d    | S 1 s&w   Y  | S )Ncontextsr^   response)r   r	   r   )r   r   r   r   r+   r,   r   w  s   

z-_make_response_event_processor.<locals>.innerr+   )r   r   r+   r   r,   r   t  s   	r   c                 C   s   t | v rdS t| v rdS d S )NTFr<   )r9   r+   r+   r,   rE     s
   rE   )BrO   rW   rF   inspectr   rB   Zsentry_sdk.constsr   Zsentry_sdk.integrationsr   r   r   Zsentry_sdk.integrations.loggingr   Zsentry_sdk.scoper	   Zsentry_sdk.tracingr
   Zsentry_sdk.utilsr   r   r   r   r   r   r   ImportErrorr&   r   Zstrawberry.extensionsr   Z#strawberry.extensions.tracing.utilsr   rv   Zstrawberry.httpr   r   Zstrawberry.extensions.tracingr   r=   r   r>   typingr   r   r   r   r   r   r   r   r    r!   Zstrawberry.typesr"   Zsentry_sdk._typesr#   r$   r%   r.   rI   rJ   r/   re   r   rE   r+   r+   r+   r,   <module>   s^     	/ -