o
    ik                     @   s  d dl mZ d dlmZ d dlmZ d dlmZ d dlZd dlm	Z	 d dlm
Z
 d dlmZ d dlZd d	lmZ d dlZd d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  ee!Z"e#dZ$e Z%e Z&e Z'ej(dkre)dej(dkre%*d e&*d e Z+e+*d e'*d neej(dkre%*d e&*d  e Z+e+*d! e'*d" nHej(d#kre%*d$ e&*d% e Z,e,*d& e'*d' n+ej(d(kre%*d) e&*d* e'*d+ nej(d,kr!e%*d) e&*d* e'*d- G d.d/ d/eZ-G d0d1 d1e-Z.G d2d3 d3eZ/G d4d5 d5e.Z0G d6d7 d7eZ1G d8d9 d9e-Z2dS ):    )ABC)
ContextVar)iscoroutinefunction)isgeneratorfunctionN)	FrameType)FunctionType)TracebackType)Protocol)Bytecode)Assembly)
get_logger)Lock)link_function_to_code)WrappedFunction)Wrapper)get_function_code)is_wrapped_with)set_function_code)unwrap)wrapT)      z#Python >= 3.15 is not supported yet)r      z
            load_const                  {context_enter}
            push_null
            call                        0
            pop_top
        z
            push_null
            load_const                  {context_return}
            swap                        3
            call                        1
        z
            load_const                  {context_return}
            push_null
            load_const                  {value}
            call                        1
        a  
        try                             @_except lasti
            push_exc_info
            load_const                  {context_exit}
            push_null
            call                        0
            pop_top
            reraise                     2
        tried

        _except:
            copy                        3
            pop_except
            reraise                     1
        r      z
            push_null
            load_const                  {context_enter}
            call                        0
            pop_top
        z
            load_const                  {context_return}
            push_null
            swap                        3
            call                        1
        z
            push_null
            load_const                  {context_return}
            load_const                  {value}
            call                        1
        a  
        try                             @_except lasti
            push_exc_info
            push_null
            load_const                  {context_exit}
            call                        0
            pop_top
            reraise                     2
        tried

        _except:
            copy                        3
            pop_except
            reraise                     1
        r      z
            push_null
            load_const                  {context_enter}
            precall                     0
            call                        0
            pop_top
        z
            load_const                  {context_return}
            push_null
            swap                        3
            precall                     1
            call                        1
        z
            push_null
            load_const                  {context_exit}
            precall                     0
            call                        0
            pop_top
        a  
        try                             @_except lasti
            push_exc_info
            push_null
            load_const                  {context_exit}
            precall                     0
            call                        0
            pop_top
            reraise                     2
        tried

        _except:
            copy                        3
            pop_except
            reraise                     1
        r   
   z
            load_const                  {context}
            setup_with                  @_except
            pop_top
        _except:
        a  
            pop_block
            load_const                  {context}
            load_method                 $__return__
            rot_three
            rot_three
            call_method                 1
            rot_two
            pop_top
        ze
            with_except_start
            pop_top
            reraise                     1
        )r   	   zO
            with_except_start
            pop_top
            reraise
        c                   @   s@  e Zd ZU dZeed< defddZdee	e
jf fddZd	ee	e
jf dd
fddZd)ddZdee	e
jf fddZdedefddZde
jee  de
je de
je dd
fddZde	de
jfddZde	dedefddZededd fddZed edefd!d"Zed edd fd#d$Zd*d%d&Zd*d'd(Zd
S )+BaseWrappingContextr   __priority__fc                 C   s$   || _ tt| j dg d| _d S N__storage_stack)default)__wrapped__r   type__name___storage_stackselfr#    r-   U/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/wrapping/context.py__init__'  s   zBaseWrappingContext.__init__returnc                 C   s   | j  }|dd  |S )Nr*   )__dict__copypopr,   stater-   r-   r.   __getstate__+  s   
z BaseWrappingContext.__getstate__r5   Nc                 C   s*   | j | tt| j dg d| _d S r$   )r1   updater   r(   r)   r*   r4   r-   r-   r.   __setstate__0  s
   z BaseWrappingContext.__setstate__c                 C   s   | j  i  | S N)r*   getappendr,   r-   r-   r.   	__enter__7  s   zBaseWrappingContext.__enter__c                 C   s   | j   S r9   )r*   r:   r3   r<   r-   r-   r.   _pop_storage;     z BaseWrappingContext._pop_storagevaluec                 C   s   |    |S r9   r>   )r,   r@   r-   r-   r.   
__return__>  s   zBaseWrappingContext.__return__exc_typeexc_valexc_tbc                 C   s   |    d S r9   rA   )r,   rC   rD   rE   r-   r-   r.   __exit__B  s   zBaseWrappingContext.__exit__keyc                 C   s   | j  d | S Nr*   r:   )r,   rG   r-   r-   r.   r:   J     zBaseWrappingContext.getc                 C   s   || j  d |< |S rH   rJ   )r,   rG   r@   r-   r-   r.   setM  s   zBaseWrappingContext.setc                 C   s:   |  |r| |}t|| sJ |S | |}|  |S r9   )
is_wrappedextract
isinstancer   )clsr#   contextr-   r-   r.   wrappedQ  s   

zBaseWrappingContext.wrapped_fc                 C      t r9   NotImplementedErrorrP   rS   r-   r-   r.   rM   [     zBaseWrappingContext.is_wrappedc                 C   rT   r9   rU   rW   r-   r-   r.   rN   _  rX   zBaseWrappingContext.extractc                 C   rT   r9   rU   r<   r-   r-   r.   r   c     zBaseWrappingContext.wrapc                 C   rT   r9   rU   r<   r-   r-   r.   r   f  rY   zBaseWrappingContext.unwrap)r0   r!   r0   N) r)   
__module____qualname__r"   int__annotations__r   r/   dictstrtAnyr6   r8   r=   r>   r   rB   Optionalr(   BaseExceptionr   rF   r:   rL   classmethodrR   boolrM   rN   r   r   r-   r-   r-   r.   r!   $  s6   
 

	
r!   c                   @   sr   e Zd ZedefddZdedejfddZ	e
dedefdd	Ze
dedd fd
dZdddZdddZdS )WrappingContextr0   c                 C   s,   z
t | jdW S  ty   tdw )N	__frame__zWrapping context not entered)_UniversalWrappingContextrN   r'   r:   
ValueErrorAttributeErrorr<   r-   r-   r.   rh   l  s
   zWrappingContext.__frame__namec                 C   s   | j j| S r9   )rh   f_locals)r,   rl   r-   r-   r.   	get_locals  s   zWrappingContext.get_localr#   c                 C   s&   zt | |W S  ty   Y dS w )NF)rf   rN   rj   rP   r#   r-   r-   r.   rM   v  s
   zWrappingContext.is_wrappedc                 C   sB   t |rz	t || W S  ty   Y nw d|  }t|)NzFunction is not wrapped with )ri   rM   rN   
registeredKeyErrorrj   )rP   r#   msgr-   r-   r.   rN   }  s   

zWrappingContext.extractNc                 C   s   t tt| j|  d S r9   )ra   castri   rR   r'   registerr<   r-   r-   r.   r     s   zWrappingContext.wrapc                 C   s(   | j }t|rt||  d S d S r9   )r'   ri   rM   rN   
unregisterr+   r-   r-   r.   r     s   
zWrappingContext.unwraprZ   )r)   r[   r\   propertyr   rh   r`   ra   rb   rn   re   r   rf   rM   rN   r   r   r-   r-   r-   r.   rg   k  s    
	rg   c                   @   s:   e Zd ZU dZee ed< dejdejdejfddZ	dS )	LazyWrappedFunctionzA lazy-wrapped function.__dd_lazy_contexts__argskwargsr0   c                 O      d S r9   r-   r,   ry   rz   r-   r-   r.   __call__  rY   zLazyWrappedFunction.__call__N)
r)   r[   r\   __doc__listrg   r^   ra   rb   r}   r-   r-   r-   r.   rw     s   
  rw   c                       s   e Zd Zdef fddZededefddZd fdd	Zd fd
dZ	de
eejf f fddZde
eejf ddf fddZ  ZS )LazyWrappingContextr#   c                    s   t  | d | _t | _d S r9   )superr/   _trampoliner   _trampoline_lockr+   	__class__r-   r.   r/     s   zLazyWrappingContext.__init__r0   c                    s8   zt  fddtt|jD W S  ty   Y dS w )Nc                 3       | ]}t | V  qd S r9   rO   .0crP   r-   r.   	<genexpr>      z1LazyWrappingContext.is_wrapped.<locals>.<genexpr>F)anyra   rs   rw   rx   rk   ro   r-   r   r.   rM     s
   "zLazyWrappingContext.is_wrappedNc              	      s    j  ]  jdur	 W d   dS t jr(t   	 W d   dS dtjdt	dt
dtjf fddt j  _tt j}t|dsTg |_|j  W d   dS 1 sew   Y  dS )	z2Perform the bytecode wrapping on first invocation.N_ry   rz   r0   c              
      s   O t tj}tjrJt tt|}d _zt t|j }	 |s1t t|`W n t
tfyB   td Y nw tt  W d    n1 sTw   Y  ||i |S )Nz(Inconsistent lazy wrapping context state)ra   rs   r   r'   r   r   r   rw   rx   removerk   rj   logwarningr   r   r   )r   ry   rz   r#   cs)r   r,   tl
trampoliner-   r.   r     s"   z,LazyWrappingContext.wrap.<locals>.trampolinerx   )r   r   ri   rM   r'   r   r   ra   rb   tupler_   rs   rw   hasattrrx   r;   r,   wfr   )r,   r   r   r.   r     s    

(

"zLazyWrappingContext.wrapc                    s   | j V t| jr| jd u sJ t   n:| jd urItt	| j}t
|dr3|j|  |js3|`ttt| j| j d | _W d    d S W d    d S W d    d S 1 s\w   Y  d S )Nrx   )r   ri   rM   r'   r   r   r   ra   rs   rw   r   rx   r   r   r   r   r-   r.   r     s"   

"zLazyWrappingContext.unwrapc                    s&   t   }|dd  |dd  |S )Nr   r   )r   r6   r3   r4   r   r-   r.   r6     s   
z LazyWrappingContext.__getstate__r5   c                    s   t  | t | _d | _d S r9   )r   r8   r   r   r   r4   r   r-   r.   r8     s   
z LazyWrappingContext.__setstate__rZ   )r)   r[   r\   r   r/   re   rf   rM   r   r   r_   r`   ra   rb   r6   r8   __classcell__r-   r-   r   r.   r     s    '(r   c                   @   s0   e Zd ZdZdZdejdejdejfddZdS )ContextWrappedFunctionzA wrapped function.Nry   rz   r0   c                 O   r{   r9   r-   r|   r-   r-   r.   r}     rY   zContextWrappedFunction.__call__)r)   r[   r\   r~   __dd_context_wrapped__ra   rb   r}   r-   r-   r-   r.   r     s     r   c                       s:  e Zd Zdeddf fddZdeddfddZdeddfd	d
ZdedefddZ	de
e defddZd' fddZd(ddZdeje
e  deje deje ddf fddZdedef fddZededefddZededd fddZejd krd(d!d"Zd(d#d$Z  ZS d(d%d"Zd(d&d$Z  ZS ))ri   r#   r0   Nc                    s   t  | g | _d S r9   )r   r/   	_contextsr+   r   r-   r.   r/     s   
z"_UniversalWrappingContext.__init__rQ   c                    sJ   t | t fdd| jD rtd| j| | jjdd d d S )Nc                 3   r   r9   r   r   _typer-   r.   r     r   z5_UniversalWrappingContext.register.<locals>.<genexpr>zContext already registeredc                 S   s   | j S r9   )r"   )r   r-   r-   r.   <lambda>  s    z4_UniversalWrappingContext.register.<locals>.<lambda>)rG   )r(   r   r   rj   r;   sortr,   rQ   r-   r   r.   rt     s
   z"_UniversalWrappingContext.registerc                 C   s>   z| j | W n ty   tdw | j s|   d S d S )NzContext not registered)r   r   rj   r   r   r-   r-   r.   ru     s   z$_UniversalWrappingContext.unregisterc                 C   s   t || jv S r9   )r(   r   r   r-   r-   r.   is_registered  r?   z'_UniversalWrappingContext.is_registeredcontext_typec                 C   s.   | j D ]}t||r|  S qtd| d)NzContext z not registered)r   rO   rq   )r,   r   rQ   r-   r-   r.   rp     s
   

z$_UniversalWrappingContext.registeredc                    s4   t    | dtd | jD ]}|  q| S )Nrh      )r   r=   rL   sys	_getframer   r   r   r-   r.   r=     s
   


z#_UniversalWrappingContext.__enter__c                 C   s   | j t   d S r9   )rF   r   exc_infor<   r-   r-   r.   _exit   rK   z_UniversalWrappingContext._exitrC   	exc_value	tracebackc                    sD   |d u rd S | j d d d D ]	}|||| qt ||| d S rH   )r   rF   r   )r,   rC   r   r   rQ   r   r-   r.   rF   #  s
   z"_UniversalWrappingContext.__exit__r@   c                    s,   | j d d d D ]}|| qt |S rH   )r   rB   r   )r,   r@   rQ   r   r-   r.   rB   1  s   z$_UniversalWrappingContext.__return__c                 C   sF   zt jdkr|jjt|jv W S |jt|jv W S  ty"   Y dS w )Nr   F)r   version_infor   r=   r   	co_constsrk   ro   r-   r-   r.   rM   7  s   
z$_UniversalWrappingContext.is_wrappedc                 C   s(   |  |s	tdtttt|jS )NzFunction is not wrapped)rM   rj   ra   rs   ri   r   r   ro   r-   r-   r.   rN   D  s   
z!_UniversalWrappingContext.extractr   c              	   C   s  | j }| |rtdtt| }}d}|t|k rn|| }z9|jdkr3tj	d| j
i|jd}ntjdkrK|jdkrKtj	| j
|jd|jd}ng }||||< |t|7 }W n	 tyc   Y nw |d	7 }|t|k st|d	D ]\}}z
|jd
krW  nW qs ty   Y qsw d}tj	d| ji|jd|||< t }tj|dd }}	d}|t|k r%|| }t|tjr|	d ur||t|	 d }	|d	7 }nKt|tjr|d	 }
|
t|k rt||
 tjst||
 tjrtj|dd}	||d	 |	 n|
d	7 }
|
t|k rt||
 tjr|d	7 }|d	7 }|t|k s|d| |t|	 || |t	d| ji | t !t"|_#t$|| t%||&  d S )NFunction already wrappedr   RETURN_VALUEcontext_returnlinenor   RETURN_CONST)r   r@   r   RESUMEcontext_enterT)
push_lasticontext_exit)'r'   rM   rj   r
   	from_coder   lenrl   CONTEXT_RETURNbindrB   r   r   r   CONTEXT_RETURN_CONSTargrk   	enumerateCONTEXT_HEADr=   co_firstlinenobytecodeLabelTryBeginrO   insertTryEndInstrr;   extendCONTEXT_FOOTr   ra   rs   r   r   r   r   to_code)r,   r#   codebciinstrreturn_codeexcept_labelfirst_try_beginlast_try_beginjr-   r-   r.   r   L  sx   



 

z_UniversalWrappingContext.wrapc           	   	   C   s  | j }| |s
d S tt|}tt|}g |tt	 d < |
  |
  |
dj}d}|t|k rg|| }t|tjrK|j|u rK|
| nt|tjr]|jj|u r]|
| n|d7 }|t|k s6|j}t|D ]\}}z|jdkr|j|u rW  nW qn ty   Y qnw t|dD ]\}}z
|jdkrW  nW q ty   Y qw d}g |||tt < d}|t|k r|| }z-|jdkrt}ntjdkr|jdkrt}nd }|d urg ||t| |< |t|8 }W n	 ty   Y nw |d7 }|t|k st||  |`d S )Nr   r   
LOAD_CONSTr   r   r   r   )r'   rM   ra   rs   r   r
   r   r   r   r   r3   targetrO   r   r   r   entryr   r   rl   r   rk   r   r   r   r   r   r   r   )	r,   r#   rR   r   r   r   r   wcr   r-   r-   r.   r     sr   



z _UniversalWrappingContext.unwrapc              	   C   sf  | j }| |rtdtt| }}d}|t|k rU|| }z |jdkr2tj	d| i|j
d}ng }||||< |t|7 }W n	 tyJ   Y nw |d7 }|t|k sd}tjdkrt|sdt|rt|dD ]\}}z
|jdkrvW  nW qi ty   Y qiw tj	d| i|jd^ |||< }|| |t	  | tt|_t|| t||  d S )	Nr   r   r   rQ   r   r   r   	GEN_START)r'   rM   rj   r
   r   r   r   rl   r   r   r   rk   r   r   r   r   r   r   r   r;   r   r   ra   rs   r   r   r   r   r   )r,   r#   r   r   r   r   r   r   r-   r-   r.   r     sD   


"

c              	   C   s,  | j }| |s
d S tt|}tt|}g |tt	 d < |
  |j}t|D ]\}}z|jdkr=|j|u r=W  nW q+ tyG   Y q+w g |||tt d < d}|t|k r|| }z|jdkrvg ||tt |< |tt8 }W n	 ty   Y nw |d7 }|t|k s\t||  |`d S )Nr   r   r   r   )r'   rM   ra   rs   r   r
   r   r   r   r   r3   r   r   rl   r   rk   r   r   r   r   )r,   r#   rR   r   r   r   r   r-   r-   r.   r     s@   

)r0   ri   rZ   )r)   r[   r\   r   r/   rg   rt   ru   rf   r   r(   rp   r=   r   ra   rc   rd   r   rF   r   rB   re   rM   rN   r   r   r   r   r   r-   r-   r   r.   ri     s6    	


P
O2ri   )3abcr   contextvarsr   inspectr   r   r   typesr   r   r   typingra   r	   r   r
   ddtrace.internal.assemblyr   ddtrace.internal.loggerr   ddtrace.internal.threadsr   !ddtrace.internal.utils.inspectionr   ddtrace.internal.wrappingr   r   r   r   r   r   r   r)   r   TypeVarr   r   r   r   r   rV   parser   CONTEXT_EXC_HEADr!   rg   rw   r   r   ri   r-   r-   r-   r.   <module>   s    
/

		
			



		
G&	P