
    $g                        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dS )    )annotationsN)cached_property)isawaitable)TYPE_CHECKINGAnyCallable	GeneratorIteratorOptional)Spantracer)LifecycleStepSchemaExtension)should_skip_tracing)GraphQLResolveInfo)ExecutionContextc                  d    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S )&DatadogTracingExtensionNexecution_contextr   Optional[ExecutionContext]returnNonec                   |r	|| _         d S d S )Nr   )selfr   s     e/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/strawberry/extensions/tracing/datadog.py__init__z DatadogTracingExtension.__init__   s$    
  	7%6D"""	7 	7    strc                    | j         j        dS |                     | 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   sY    !'/"?__T%;%ABB
!0 	K,;JJjJJJr   lifecycle_stepr   namekwargsr   r   c                *    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   r(   r)   r*   s       r   create_spanz#DatadogTracingExtension.create_span(   s2    * |
 

 
 
 	
r   r#   c                t    t          j        |                    d                                                    S )Nzutf-8)hashlibmd5encode	hexdigest)r   r#   s     r   r$   z"DatadogTracingExtension.hash_queryC   s*    {5<<0011;;===r   Iterator[None]c              #    K   | j         j        | _        | j        r| j         nd}|                     t          j        || j        d          | _        | j                            d| j                   | j         j	        }|F|
                                }d}|                    d          rd}n|                    d          rd}nd}| j                            d	|           d V  | j                                         d S )
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D)-)=Tt#%%CT 	 !,,#( 	 - 
 
 	!!":D<PQQQ&,KKMME$N
++ 0!+!!.11 0!/,N!!":NKKK  """""r   Generator[None, None, None]c              #     K   |                      t          j        d          | _        d V  | j                                         d S )N
Validationr(   r)   )r/   r   
VALIDATIONvalidation_spanrB   r   s    r   on_validatez#DatadogTracingExtension.on_validateg   sR      #//(3  0  
  
 	##%%%%%r   c              #     K   |                      t          j        d          | _        d V  | j                                         d S )NParsingrI   )r/   r   PARSEparsing_spanrB   rL   s    r   on_parsez DatadogTracingExtension.on_parseo   sR       ,,(. - 
 
 	  """""r   _nextr   rootinfor   argsc                  K   t          ||          r& |||g|R i |}t          |          r| d {V }|S |j         d|j         }|                     t
          j        d|           5 }|                    d|j                   |                    d|j        j                   |                    d|           |                    dd	                    t          t          |j                                                                        |||g|R i |}t          |          r| d {V }|cd d d            S # 1 swxY w Y   d S N.zResolving: rI   zgraphql.field_namezgraphql.parent_typezgraphql.field_pathzgraphql.path)r   r   parent_type
field_namer/   r   RESOLVEr?   r)   joinmapr   pathas_list)	r   rS   rT   rU   rV   r*   result
field_pathspans	            r   resolvezDatadogTracingExtension.resolvew   s      ud++ 	U4777777F6"" &%M(<<4?<<
(0+z++  
 
 	 LL-t???LL.0@0EFFFLL-z:::LL#c49;L;L;N;N2O2O)P)PQQQU4777777F6"" &%	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   .C
EE	E	)r   r   r   r   )r   r   )r(   r   r)   r   r*   r   r   r   )r#   r   r   r   )r   r5   )r   rF   rS   r   rT   r   rU   r   rV   r   r*   r   r   r   )__name__
__module____qualname__r   r   r'   r/   r$   rE   rM   rR   rd    r   r   r   r      s         9=7 7 7 7 7 7 	 	 	 _	
 
 
 
6> > > ># # # #B& & & &# # # #           r   r   c                      e Zd ZddZdS )DatadogTracingExtensionSyncrS   r   rT   r   rU   r   rV   r   r*   r   c                <   t          ||          r |||g|R i |S |j         d|j         }|                     t          j        d|           5 }|                    d|j                   |                    d|j        j                   |                    d|           |                    dd                    t          t          |j                                                                        |||g|R i |cd d d            S # 1 swxY w Y   d S rX   )r   rZ   r[   r/   r   r\   r?   r)   r]   r^   r   r_   r`   )r   rS   rT   rU   rV   r*   rb   rc   s           r   rd   z#DatadogTracingExtensionSync.resolve   s~    ud++ 	65t5d555f555(<<4?<<
(0+z++  
 
 		6 LL-t???LL.0@0EFFFLL-z:::LL#c49;L;L;N;N2O2O)P)PQQQ5t5d555f55		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6s   B1DDDNre   )rf   rg   rh   rd   ri   r   r   rk   rk      s(        6 6 6 6 6 6r   rk   )
__future__r   r1   	functoolsr   inspectr   typingr   r   r   r	   r
   r   ddtracer   r   strawberry.extensionsr   r   #strawberry.extensions.tracing.utilsr   r-   r   strawberry.types.executionr   r   rk   __all__ri   r   r   <module>rv      sQ   " " " " " "  % % % % % %       N N N N N N N N N N N N N N N N                 @ @ @ @ @ @ @ @ C C C C C C <******;;;;;;D D D D Do D D DN6 6 6 6 6"9 6 6 64 %&C
Dr   