o
    jb                     @   s   d Z G dd deZdS )aF  
This module contains an ordered dictionary implementation.

We need this in Python 2.7 because collections.OrderedDict does not support
reordering by assignment to keys().

We need this in Python 3.x because keys() returns KeyView which which doesn't
support `__getitem__` -- i.e. getting nth variable from the ordered dict.
c                       s   e Zd ZdZd( fdd	Z fddZ fddZd	d
 Zdd Z fddZ	dd Z
 fddZdd Z fddZ fddZdd Zdd Z fddZdd  Zd)d"d#Zd$d% Z fd&d'Z  ZS )*odictz-Sort of an ordered dictionary implementation. c                    sN   t || jrt|j| _tt| | d S g | _tt|   | | d S N)
isinstance	__class__list_odict__listsuperr   __init__update)selfdatar   r   P/var/www/html/LicenciasMiG/venv/lib/python3.10/site-packages/spyne/util/odict.pyr	   "   s   zodict.__init__c                    s0   t |trtt| | j| S tt| |S r   )r   intr   r   __getitem__r   r   keyr   r   r   r   ,   s   
zodict.__getitem__c                    s   t |trtt| | j| | n|| vr| j| tt| || t| jtt|  ks?J t	| jtt| 
 fd S r   )r   r   r   r   __setitem__r   appendlen__len__repr__repr__)r   r   valr   r   r   r   2   s   

zodict.__setitem__c                 C   s   dd dd |  D  S )Nz{%s},c                 S   s   g | ]
\}}d ||f qS )z%r: %rr   ).0kvr   r   r   
<listcomp>?   s    z"odict.__repr__.<locals>.<listcomp>)joinitemsr   r   r   r   r   >   s   zodict.__repr__c                 C   s   t | S r   )r   r!   r   r   r   __str__A   s   zodict.__str__c                    s&   t | jtt|  ksJ t | jS r   )r   r   r   r   r   r!   r   r   r   r   D   s   
zodict.__len__c                 C   s
   t | jS r   )iterr   r!   r   r   r   __iter__H   s   
zodict.__iter__c                    sJ   t |tstt| | | j|}ntt| | j|  | j|= d S r   )r   r   r   r   __delitem__r   indexr   r   r   r   r%   K   s
   
zodict.__delitem__c                 C   s   |  | | S r   )r
   )r   otherr   r   r   __add__S   s   
zodict.__add__c                    s.   g }| j D ]}||tt| |f q|S r   r   r   r   r   r   )r   retvalr   r   r   r   r    W   s   
zodict.itemsc                 #   s(    | j D ]}|tt| |fV  qd S r   )r   r   r   r   )r   r   r   r   r   	iteritems]   s   
zodict.iteritemsc                 C   s   | j S r   r   r!   r   r   r   keysa   s   z
odict.keysc                 K   sJ   t |ttfr| }|D ]\}}|| |< q| D ]\}}|| |< qd S r   )r   dictr   r    )r   r   kwargsr   r   r   r   r   r
   d   s   

zodict.updatec                    s*   g }| j D ]}|tt| | q|S r   r)   )r   r*   lr   r   r   valuesn   s   
zodict.valuesc                 c   s    | j D ]}| | V  qd S r   r,   )r   r0   r   r   r   
itervaluest   s   
zodict.itervaluesNc                 C   s   || v r| | S |S r   r   )r   r   defaultr   r   r   getx   s   z	odict.getc                 C   s   |\}}|| |< d S r   r   )r   tr   r   r   r   r   r   }   s   zodict.appendc                    sD   |\}}|| v r| j | j |= | j || tt| || d S r   )r   r&   insertr   r   r   )r   r&   itemr   r   r   r   r   r6      s
   zodict.insert)r   r   )__name__
__module____qualname____doc__r	   r   r   r   r"   r   r$   r%   r(   r    r+   r-   r
   r1   r2   r4   r   r6   __classcell__r   r   r   r   r      s(    


r   N)r;   r.   r   r   r   r   r   <module>   s   