o
    i	                  
   @   sP  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jd	 Zd
ede	eeef  fddZd
ede	eeef  fddZd
ede	eeef  fddZdededefddZd"dedede
e de
e fddZdededefddZdedeeef fddZdedeeef fd d!ZdS )#    )
CO_VARARGS)CO_VARKEYWORDS)chain)	FrameType)Any)Iterator)Optional)	get_slots__dict__framereturnc                    sN   | j }| j |jt|jt@  t|jt@  }|jd | } fdd|D S )Nc                 3       | ]
}|  |fV  qd S Nget.0name_locals M/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/debugging/_safety.py	<genexpr>   s    zget_args.<locals>.<genexpr>)f_codef_localsco_argcountboolco_flagsr   r   co_varnames)r   codenargs	arg_namesr   r   r   get_args   s
   "r"   c                    sV   | j }| j |jt|jt@  t|jt@  } fddt|j|d  |j	|j
D S )Nc                 3   r   r   r   r   r   r   r   r      s    
zget_locals.<locals>.<genexpr>)r   r   r   r   r   r   r   r   r   co_freevarsco_cellvars)r   r   r    r   r   r   
get_locals   s   "
r%   c                    s    | j j}| j  fdd|D S )Nc                 3   s$    | ]}| v r| | fV  qd S r   r   r   _globalsr   r   r   $   s   " zget_globals.<locals>.<genexpr>)r   co_names	f_globals)r   nonlocal_namesr   r&   r   get_globals    s   r+   objr   c              
   C   s8   zt | |W S  ty } z|W  Y d }~S d }~ww r   )object__getattribute__	Exception)r,   r   er   r   r   getattr_or_exception'   s   r1   Ndefaultc                 C   s&   zt | |W S  ty   | Y S w r   )r-   r.   AttributeError)r,   r   r2   r   r   r   safe_getattr.   s
   r4   indexc                 C   sV   t | trt| |S t | trt| |S t | tr!t| |S tdtt|  )Nz!Type is not indexable collection )
isinstancelist__getitem__dicttuple	TypeErrorstrtype)r,   r5   r   r   r   safe_getitem5   s   


r>   oc                 C   sF   zt t| d }tu r| W S W td ty"   Y tdw )Nr
   zNo safe __dict__)r=   r-   r.   r9   copyr/   r3   )r?   r
   r   r   r   
_safe_dict?   s   
rA   c                    s4   zt  W S  ty    fddt D  Y S w )Nc                    s   i | ]}|t  |qS r   )r1   )r   sr,   r   r   
<dictcomp>N   s    zget_fields.<locals>.<dictcomp>)rA   r3   r	   rC   r   rC   r   
get_fieldsI   s
   
rE   r   )inspectr   r   	itertoolsr   typesr   typingr   r   r   ddtrace.internal.safetyr	   r=   r
   GetSetDescriptorr:   r<   r"   r%   r+   r1   r4   r>   r9   rA   rE   r   r   r   r   <module>   s"    	$

