o
    h.7                     @   s  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yW   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.m/Z/ d dl0m1Z1m2Z2 d dl!m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 ed G dd de	Z9d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' Z@d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+   d/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/strawberry.py__init__A   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_onceK   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 }|jd ur&|j}nt|}td|r1dnd|r6dnd dd |D }|	|rFt
nt ||d<  | g|R i |S )	N
extensionszfAssuming strawberry is running %s. If not, initialize it as StrawberryIntegration(async_execution=%s).asyncsyncFalseTruec                 S   s   g | ]
}|t tfvr|qS r+   )StrawberrySentryAsyncExtensionStrawberrySentrySyncExtension).0	extensionr+   r+   r,   
<listcomp>o   s    zK_patch_schema_init.<locals>._sentry_patched_schema_init.<locals>.<listcomp>)
sentry_sdk
get_clientget_integrationr%   getr)   _guess_if_using_asyncr   infoappendSentryAsyncExtensionSentrySyncExtension)r*   argskwargsintegrationr9   should_use_async_extensionold_schema_initr+   r,   _sentry_patched_schema_initY   s(   



z7_patch_schema_init.<locals>._sentry_patched_schema_init)r   r-   	functoolswraps)rR   r+   rP   r,   r.   U   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 )rJ   Nexecution_contextc                C   s   |r|| _ d S d S r2   rU   )r*   rV   r+   r+   r,   r-      s   
zSentryAsyncExtension.__init__c                 C   s*   |  | jj}| jjrd| jj|S |S )Nz{}:{})
hash_queryrV   queryoperation_namer(   )r*   
query_hashr+   r+   r,   _resource_name   s   z#SentryAsyncExtension._resource_namec                 C   s   t |d S )Nzutf-8)hashlibmd5encode	hexdigest)r*   rX   r+   r+   r,   rW      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 )NrX    mutationsubscriptionz {}zgraphql.operation)rY   operation_type)categorydataopnamer7   zgraphql.operation.typezgraphql.operation.namezgraphql.documentzgraphql.resource_name)rV   rY   _operation_namer   GRAPHQL_QUERYrX   strip
startswithGRAPHQL_MUTATIONGRAPHQL_SUBSCRIPTIONr(   rC   add_breadcrumbget_isolation_scope_make_request_event_processoradd_event_processorget_current_spanstart_childr%   r7   graphql_span
start_spanset_datar[   containing_transactionrh   r
   	COMPONENTsourcerg   finish)r*   rc   rg   descriptionscopeevent_processorspantransactionr+   r+   r,   on_operation   s^   




z!SentryAsyncExtension.on_operationc                 c   .    | j jtjdtjd| _d V  | j  d S )N
validationrf   )ru   rt   r   GRAPHQL_VALIDATEr%   r7   validation_spanr{   r*   r+   r+   r,   on_validate      z SentryAsyncExtension.on_validatec                 c   r   )Nparsingrf   )ru   rt   r   GRAPHQL_PARSEr%   r7   parsing_spanr{   r   r+   r+   r,   on_parse   r   zSentryAsyncExtension.on_parsec                 C   s
   t ||S r2   )strawberry_should_skip_tracing)r*   _nextrH   r+   r+   r,   r      s   
z(SentryAsyncExtension.should_skip_tracingc                    s0   |||g|R i |}t |r|I d H }|S r2   r   )r*   r   rootrH   rL   rM   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 {}rf   zgraphql.field_namezgraphql.parent_typezgraphql.field_pathzgraphql.path.)r   r   r(   parent_type
field_nameru   rt   r   GRAPHQL_RESOLVEr%   r7   rw   rh   joinmapstrpathas_listr*   r   r   rH   rL   rM   
field_pathr   r+   r+   r,   resolve   s    " $zSentryAsyncExtension.resolve)r3   r4   r5   r-   r   r[   rW   r   r   r   r   r   r   r+   r+   r+   r,   rJ      s    	
	>	rJ   c                   @   s   e Zd Zdd ZdS )rK   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   ru   rt   r   r   r%   r7   rw   rh   r   r   r   r   r   r   r+   r+   r,   r     s   $zSentrySyncExtension.resolveN)r3   r4   r5   r   r+   r+   r+   r,   rK     s    rK   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_errors0  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)typehandled)client_options	mechanism)hint)rC   rp   _make_response_event_processorrr   r   r   rD   optionsr%   r6   capture_event)r*   r   r   r}   r~   erroreventr   r+   r+   r,   r   5  s"   

"z3_patch_views.<locals>._sentry_patched_handle_errors)r   AsyncBaseHTTPView_handle_errorsr   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graphql
api_targetre   rX   	variablesoperationName)	r   r	   
setdefaultrF   rX   r   rY   KeyError	TypeError)r   r   request_datare   rU   r+   r,   innerV  s8   






z,_make_request_event_processor.<locals>.innerr+   )rV   r   r+   rU   r,   rq   S  s   rq   c                    r   )Nc                    sZ   t    t r| di }d i|d< W d    | S W d    | S 1 s&w   Y  | S )Ncontextsre   response)r   r	   r   )r   r   r   r   r+   r,   r   t  s   

z-_make_response_event_processor.<locals>.innerr+   )r   r   r+   r   r,   r   q  s   	r   c                 C   s.   t | v rdS t| v rdS th dtt @ S )NTF>   fastapilitestarstarlite	starlette)r>   r?   boolsetr   )r9   r+   r+   r,   rG     s   rG   )ArS   r\   inspectr   rC   sentry_sdk.constsr   sentry_sdk.integrationsr   r   r   sentry_sdk.integrations.loggingr   sentry_sdk.scoper	   sentry_sdk.tracingr
   sentry_sdk.utilsr   r   r   r   r   r   r   ImportErrorr&   r   strawberry.extensionsr   #strawberry.extensions.tracing.utilsr   r   strawberry.httpr   r   strawberry.extensions.tracingr   r>   r   r?   typingr   r   r   r   r   r   r   r   r    r!   strawberry.typesr"   sentry_sdk._typesr#   r$   r%   r.   rJ   rK   r/   rq   r   rG   r+   r+   r+   r,   <module>   s\     	- -