
    uYf                        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 d dlmZ  ed      Zd Z e       d        Zd Zd Zedk\  Z G d dej2                        Zy)    )Any)Iterator)List)Optional)Set)Tuple)Type)Union)BUILTIN)PYTHON_VERSION_INFO)AttrDict)cached)wraptNc                 |    	 t         j                  | d      }t        |t              r|fS |S # t        $ r g cY S w xY w)N	__slots__)object__getattribute__
isinstancestrAttributeError)objslotss     W/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/ddtrace/internal/safety.py_maybe_slotsr      sC    ''[9eS!8O 	s   (- - ;;c                 z    t         j                  | d      D ch c]  }t        |      D ]  }|  c}}S c c}}w )N__mro__)r   r   r   )_typecls_s      r   _slotsr       s7      00	B^#LY\L]^qA^A^^^s   7c                 *    t        t        |             S )zGet the object's slots.)r    type)r   s    r   	get_slotsr#   %   s     $s)    c                 ,    t        t        |       |      S N)
issubclassr"   )r   typess     r   _isinstancer)   +   s     d3i''r$   )      c                   j     e Zd ZdZd Z fdZ fdZ fdZ fdZ fdZ	d Z
e
Zed	        Z xZS )
SafeObjectProxyaF  Object proxy to make sure we don't call unsafe code.

    Access to the wrapped object is denied to prevent any potential
    side-effects. Arbitrary objects are essentially converted into attribute
    dictionaries. Callable objects are made uncallable to prevent accidental
    calls that can also trigger side-effects.
    c                     t        d      )NzCannot call safe object)RuntimeError)selfargskwargss      r   __call__zSafeObjectProxy.__call__>   s    455r$   c                 V    |dk(  rt         st        d      t        t        |   |      S N__wrapped__zAccess denied)IS_312_OR_NEWERr   superr-   r   r0   name	__class__s     r   r   z SafeObjectProxy.__getattribute__B   s*    =  11_d<TBBr$   c                     |dk(  rt         rt        d      t        |       j                  t        t
        |   |            S r5   )r7   r   r"   safer8   r-   __getattr__r9   s     r   r>   zSafeObjectProxy.__getattr__I   s7    = _ 11Dzu_dGMNNr$   c                 Z    t        |       j                  t        t        |   |            S r&   )r"   r=   r8   r-   __getitem__)r0   itemr;   s     r   r@   zSafeObjectProxy.__getitem__O   s"    Dzu_dGMNNr$   c                 N     t         fdt        t                  D              S )Nc              3   R   K   | ]  }t              j                  |         y wr&   r"   r=   ).0r   r0   s     r   	<genexpr>z+SafeObjectProxy.__iter__.<locals>.<genexpr>U   s     X1DJOOA&Xs   $')iterr8   r-   __iter__r0   r;   s   `r   rH   zSafeObjectProxy.__iter__S   s    Xot0U0WXXXr$   c                 F      fdt        t           d             D        S )Nc              3      K   | ];  \  }}t              j                  |      t              j                  |      f = y wr&   rD   )rE   kvr0   s      r   rF   z(SafeObjectProxy.items.<locals>.<genexpr>Y   s9      
9=AT$Z__Qd!34
s   AAitems)r8   r-   r>   rI   s   `r   rN   zSafeObjectProxy.itemsW   s&    
AFX\AijqArAt
 	
r$   c                 ,    t         j                  |       S r&   )r   __repr__)r0   s    r   __str__zSafeObjectProxy.__str__^   s    t$$r$   c                    t        |      }t        |t               r	 |j                  t        k(  r|S n)|t
        t        t        t        t        t        t        hv r|S 	  | t        t        j                  |d                  S # t        $ r Y 1w xY w# t        $ r Y nw xY wt        |      }|r: | t        |D ci c]  }|t        j                  ||       nc c}w c}            S  | |      S )z!Turn an object into a safe proxy.__dict__)r"   r)   
__module__r   r   r   intfloatboolNoneTypebytescomplexr   r   r   r#   )r   r   r   r   rL   s        r   r=   zSafeObjectProxy.safec   s     S	sD!>>W,J - sChwGGJ	x 7 7Z HIJJ "   		 #xU SF$;$;C$C!C S STUU 3xs)   B $B 	BB	BB8C)__name__rT   __qualname____doc__r3   r   r>   r@   rH   rN   rQ   rP   classmethodr=   __classcell__)r;   s   @r   r-   r-   5   sH    6COOY
% H r$   r-   )typingr   r   r   r   r   r   r	   r
   ddtrace.internal.compatr   r   ddtrace.internal.utils.attrdictr   ddtrace.internal.utils.cacher   ddtrace.vendorr   r"   rX   r   r    r#   r)   r7   ObjectProxyr-    r$   r   <module>rg      s~            + 7 4 /   : _ 
_
( &0Le'' Lr$   