3
b9
                 @   s   d dl mZmZ ddlmZ G dd deZG dd deZedkrdd	d
dddZ	ee	Z
ed eddd xe
D ]Zede dd qvW ed ee	ddZ	ed eddd x e	j D ]Zede dd qW ed dS )    )absolute_importprint_function   )BidirMapc               @   s    e Zd Zdd Zdd ZeZdS )SortedDictIteratorc             C   s   || _ || _d S )N)sorted_dictkeys)selfr   r    r
   M/oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/SortedDict.py__init__   s    zSortedDictIterator.__init__c             C   s*   y| j jdS  tk
r$   tY nX d S )Nr   )r   pop
IndexErrorStopIteration)r	   r
   r
   r   __next__   s    zSortedDictIterator.__next__N)__name__
__module____qualname__r   r   nextr
   r
   r
   r   r      s   r   c                   s:   e Zd Zi dfddZdd Zdd Z fdd	Z  ZS )

SortedDictTc             K   s   t j| |f| || _dS )a  
        WARNING: SortedDict() with ignore_case==True will
                 drop entries differing only in capitalisation!
                 Eg: SortedDict({'auckland':1, 'Auckland':2}).keys() => ['Auckland']
                 With ignore_case==False it's all right
        N)dictr   ignore_case)r	   mappingr   kwargsr
   r
   r   r      s    zSortedDict.__init__c                s^   t j| }| jrNt  x|D ]}| |j < qW t j } fdd|D S t|}|S d S )Nc                s   g | ]} | qS r
   r
   ).0k)xlat_mapr
   r   
<listcomp>1   s    z#SortedDict.keys.<locals>.<listcomp>)r   r   r   r   lowersorted)r	   r   keyZlc_keysr
   )r   r   r   %   s    

zSortedDict.keysc             C   s   t | | j S )N)r   r   )r	   r
   r
   r   __iter__6   s    zSortedDict.__iter__c                sN   t |tr:t| jd}x2| j | D ]}| | ||< q$W ntt| j|}|S )z0Override to support the "get_slice" for python3 )r   )
isinstanceslicer   r   r   super__getitem__)r	   indexrr   )	__class__r
   r   r%   9   s    
zSortedDict.__getitem__)r   r   r   r   r   r!   r%   __classcell__r
   r
   )r(   r   r      s   
r   __main__            )ZAWSActionZamericaZAucklandZAmericaz8Wanted: Action, america, Auckland, AWS,    [ignore case]zGot:    )endz%s,z   [used: __iter__()]F)r   zDWanted: AWS, Action, America, Auckland, america,    [case sensitive]z   [used: keys()]N)
__future__r   r   r   objectr   r   r   r   dsdprintr    r   r
   r
   r
   r   <module>	   s"   *
