
    Xj                        d dl mZ d dl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mZ d dlmZmZ d dlmZ erd d	lmZ d d
lmZ  G d de      Z G d de      ZddgZy)    )annotationsN)cached_property)isawaitable)TYPE_CHECKINGAnyCallable	GeneratorIteratorOptional)Spantracer)LifecycleStepSchemaExtension)should_skip_tracing)GraphQLResolveInfo)ExecutionContextc                      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y)DatadogTracingExtensionNexecution_contextc                   |r|| _         y y )Nr   )selfr   s     r/var/www/html/myl_app/scheduler-service/venv/lib/python3.12/site-packages/strawberry/extensions/tracing/datadog.py__init__z DatadogTracingExtension.__init__   s    
 %6D"     c                    | j                   j                  y| j                  | j                   j                        }| j                   j                  r| j                   j                   d| S |S )Nquery_missing:)r   query
hash_queryoperation_name)r   
query_hashs     r   _resource_namez&DatadogTracingExtension._resource_name   sd    !!''/"__T%;%;%A%AB
!!00,,;;<Aj\JJr   c                2    t        j                  |fddi|S )a!  Create a span with the given name and kwargs.

        You can  override this if you want to add more tags to the span.

        Example:

        ```python
        class CustomExtension(DatadogTracingExtension):
            def create_span(self, lifecycle_step, name, **kwargs):
                span = super().create_span(lifecycle_step, name, **kwargs)
                if lifecycle_step == LifeCycleStep.OPERATION:
                    span.set_tag("graphql.query", self.execution_context.query)
                return span
        ```
        	span_typegraphql)r   trace)r   lifecycle_stepnamekwargss       r   create_spanz#DatadogTracingExtension.create_span(   s*    * ||

 
 	
r   c                f    t        j                  |j                  d            j                         S )Nzutf-8)hashlibmd5encode	hexdigest)r   r   s     r   r    z"DatadogTracingExtension.hash_queryC   s#    {{5<<01;;==r   c              #  D  K   | j                   j                  | _        | j                  r| j                   nd}| j                  t        j
                  || j                  d      | _        | j                  j                  d| j                         | j                   j                  }|:|j                         }d}|j                  d      rd}n|j                  d      rd}nd}| j                  j                  d	|       d  | j                  j                          y w)
NzAnonymous Query
strawberry)resourceservicezgraphql.operation_namer   mutationsubscriptionr   zgraphql.operation_type)r   r!   _operation_namer+   r   	OPERATIONr#   request_spanset_tagr   strip
startswithfinish)r   	span_namer   operation_types       r   on_operationz$DatadogTracingExtension.on_operationF   s    #55DD)-)=)=t##$CT 	 !,,##(( 	 - 
 	!!":D<P<PQ&&,,KKME$N
+!+!!.1!/,N!!":NK  "s   DD c              #     K   | j                  t        j                  d      | _        d  | j                  j	                          y w)N
Validationr(   r)   )r+   r   
VALIDATIONvalidation_spanr=   r   s    r   on_validatez#DatadogTracingExtension.on_validateg   sA     #//(33  0  
 	##%   AAc              #     K   | j                  t        j                  d      | _        d  | j                  j	                          y w)NParsingrC   )r+   r   PARSEparsing_spanr=   rF   s    r   on_parsez DatadogTracingExtension.on_parseo   sA      ,,(.. - 
 	  "rH   c                  K   t        ||      r$ |||g|i |}t        |      r
| d {   }|S |j                   d|j                   }| j	                  t
        j                  d|       5 }|j                  d|j                         |j                  d|j                  j                         |j                  d|       |j                  ddj                  t        t        |j                  j                                             |||g|i |}t        |      r
| d {   }|cd d d        S 7 7 # 1 sw Y   y xY wwN.zResolving: rC   zgraphql.field_namezgraphql.parent_typezgraphql.field_pathzgraphql.path)r   r   parent_type
field_namer+   r   RESOLVEr:   r)   joinmapstrpathas_list)	r   _nextrootinfoargsr*   result
field_pathspans	            r   resolvezDatadogTracingExtension.resolvew   s8     ud+4777F6"%M(()4??*;<
(00zl+  
 	 LL-t?LL.0@0@0E0EFLL-z:LL#c499;L;L;N2O)PQ4777F6"%	 	 &$ &	 	s;   *ED;AE2B9E +D>,E 1E>E  E	E)r   zOptional[ExecutionContext]returnNone)ra   rV   )r(   r   r)   rV   r*   r   ra   r   )r   rV   ra   rV   )ra   zIterator[None])ra   zGenerator[None, None, None]rY   r   rZ   r   r[   r   r\   rV   r*   r   ra   r   )__name__
__module____qualname__r   r   r#   r+   r    r@   rG   rM   r`    r   r   r   r      s     9=7 67 
	7 	 	
%
 
 	

 

6>#B&#     !	 
     
 r   r   c                  ,    e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 ddZy)DatadogTracingExtensionSyncc                .   t        ||      r |||g|i |S |j                   d|j                   }| j                  t        j
                  d|       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rO   )r   rQ   rR   r+   r   rS   r:   r)   rT   rU   rV   rW   rX   )r   rY   rZ   r[   r\   r*   r^   r_   s           r   r`   z#DatadogTracingExtensionSync.resolve   s     ud+t5d5f55(()4??*;<
(00zl+  
 		6 LL-t?LL.0@0@0E0EFLL-z:LL#c499;L;L;N2O)PQt5d5f5		6 		6 		6s   B(DDNrc   )rd   re   rf   r`   rg   r   r   ri   ri      sA    66 6 !	6
 6 6 
6r   ri   )
__future__r   r-   	functoolsr   inspectr   typingr   r   r   r	   r
   r   ddtracer   r   strawberry.extensionsr   r   #strawberry.extensions.tracing.utilsr   r&   r   strawberry.types.executionr   r   ri   __all__rg   r   r   <module>rt      sR    "  %  N N   @ C*;Do DN6"9 64 %&C
Dr   