
    hd                         d 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mZmZmZ ddlmZ d Z G d de          Z ed	          Z ed
          Z G d deeef                   ZdS )z
Direct Access dictionary.
    )Scapy_Exception)	plain_str)	AnyDictGenericIteratorListTupleTypeTypeVarUnion)Selfc                     t          |           } | rt          | d                   dv rd| z   } |                     d          S )zM
    Modifies a string to make sure it can be used as an attribute name.
    r   
0123456789n_   ________________________________________________0123456789_______ABCDEFGHIJKLMNOPQRSTUVWXYZ______abcdefghijklmnopqrstuvwxyz_____________________________________________________________________________________________________________________________________)r   str	translate)xs    P/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/dadict.pyfixnamer   !   sO    
 	!A S1YY,&&1H;;	>      c                       e Zd ZdS )DADict_ExceptionN)__name__
__module____qualname__ r   r   r   r   2   s        Dr   r   _K_Vc                       e Zd ZdZddgZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd ZeZd Zd Zd Zd ZdS )DADicta_  
    Direct Access Dictionary

    This acts like a dict, but it provides a direct attribute access
    to its keys through its values. This is used to store protocols,
    manuf...

    For instance, scapy fields will use a DADict as an enum::

        ETHER_TYPES[2048] -> IPv4

    Whereas humans can access::

        ETHER_TYPES.IPv4 -> 2048
    _namedc                 L    || _         i | _        |                     |           d S N)r#   r$   update)selfr#   kargss      r   __init__zDADict.__init__L   s(    
Er   c                 \    t          |t          t          f          rt          |          S dS )zH
        Return value that is used as key for the direct access
        unknown)
isinstancer   bytesr   )r(   vs     r   identzDADict.identR   s+    
 a#u&& 	1::yr   c                 X    t          |i |                                D ]
\  }}|| |<   d S r&   )dictitems)r(   argskwargskr/   s        r   r'   zDADict.update[   sC    $)&))//11 	 	DAqDGG	 	r   c              #   h   K   | j         D ]'}t          |t                    r|d         dk    r|V  (d S )Nr   _)r$   r-   r   )r(   r   s     r   iterkeyszDADict.iterkeys`   sI       	 	Aa%% 1	 	r   c                 D    t          |                                           S r&   )listr9   r(   s    r   keyszDADict.keysf   s    DMMOO$$$r   c                 *    |                                  S r&   )r9   r<   s    r   __iter__zDADict.__iter__j   s    }}r   c                 4    | j                                         S r&   )r$   valuesr<   s    r   
itervalueszDADict.itervaluesn   s    v}}r   c                 D    t          |                                           S r&   )r;   rB   r<   s    r   rA   zDADict.valuesr   s    DOO%%&&&r   c                 j    |                                  D ]}t          |dd| |                    d S )Nz>10z = )r9   print)r(   r6   s     r   _showzDADict._showv   sE     	. 	.ADGG,----	. 	.r   c                 8    d| j         dt          |           dS )N<z - z
 elements>)r#   lenr<   s    r   __repr__zDADict.__repr__{   s     '+zzz3t9999==r   c                     | j         |         S r&   r$   )r(   attrs     r   __getitem__zDADict.__getitem__   s    vd|r   c                     || j         |<   d S r&   rL   )r(   rM   vals      r   __setitem__zDADict.__setitem__   s    tr   c                 *    t          | j                  S r&   )rI   r$   r<   s    r   __len__zDADict.__len__   s    46{{r   c                 (    t          |           dk    S )N   )rI   r<   s    r   __nonzero__zDADict.__nonzero__   s     4yy1}r   c                     	 t                               | |          S # t          $ rA | j                                        D ]$\  }}|                     |          |k    r|c cY S %Y nw xY wt          r&   )object__getattribute__AttributeErrorr$   r3   r0   )r(   rM   r6   r/   s       r   __getattr__zDADict.__getattr__   s    	**4666 	 	 	  1::a==D((HHHHH ) 	 s    AA($A('A(c                 D      fd                                  D             S )Nc                 :    g | ]}                     |          S r   )r0   ).0r   r(   s     r   
<listcomp>z"DADict.__dir__.<locals>.<listcomp>   s#    999!

1999r   )rB   r<   s   `r   __dir__zDADict.__dir__   s'    9999t'8'89999r   c                 .    | j         | j        f| j        ffS r&   )	__class__r#   r$   r<   s    r   
__reduce__zDADict.__reduce__   s    y99r   c                 F    | j                             |d                    | S )Nr   )r$   r'   )r(   states     r   __setstate__zDADict.__setstate__   s    eAhr   N)r"   )r   r   r   __doc__	__slots__r*   r0   r'   r9   r=   r?   rB   rA   rF   rJ   rN   rQ   rS   rV   __bool__r[   r`   rc   rf   r   r   r   r"   r"   :   sC         #I       
  % % %    ' ' '. . .
> > >         H  : : :: : :    r   r"   N)rg   scapy.errorr   scapy.compatr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r    r"   r   r   r   <module>rm      sR    ( ' ' ' ' ' " " " " " "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
        "	 	 	 	 	 	 	 	 WT]]WT]]l l l l lWRV_ l l l l lr   