B
    à%Q[è  ã               @   s>   d Z ddlZddlmZ G dd„ dejƒZG dd„ deƒZdS )	Ú
é    Né   )ÚSEQUENCE_TYPESc               @   sŠ   e Zd Zd dd„Zdd„ Zedd„ ƒZdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )!ÚCaseInsensitiveDictNc             K   s8   t ƒ | _t ƒ | _|s|r4|d kr&t ƒ }| j|f|Ž d S )N)ÚdictÚ_storeÚ_case_insensitive_keymapÚupdate)ÚselfÚotherÚkwargs© r   úUC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6i93dh7p\ldap3\ldap3\utils\ciDict.pyÚ__init__   s    zCaseInsensitiveDict.__init__c             C   s(   y|   |¡ dS  tk
r"   dS X d S )NTF)Ú__getitem__ÚKeyError)r
   Úitemr   r   r   Ú__contains__'   s
    
z CaseInsensitiveDict.__contains__c             C   s   t | dƒr|  ¡  ¡ S | S )NÚlower)ÚhasattrÚstripr   )Úkeyr   r   r   Ú_ci_key.   s    zCaseInsensitiveDict._ci_keyc             C   s$   |   |¡}| j| j| = | j|= d S )N)r   r   r   )r
   r   Úci_keyr   r   r   Ú__delitem__2   s    
zCaseInsensitiveDict.__delitem__c             C   s>   |   |¡}|| jkr&|| j| j| < n|| j|< || j|< d S )N)r   r   r   )r
   r   r   r   r   r   r   Ú__setitem__7   s
    


zCaseInsensitiveDict.__setitem__c             C   s   | j | j|  |¡  S )N)r   r   r   )r
   r   r   r   r   r   ?   s    zCaseInsensitiveDict.__getitem__c             C   s
   | j  ¡ S )N)r   Ú__iter__)r
   r   r   r   r   B   s    zCaseInsensitiveDict.__iter__c             C   s
   t | jƒS )N)Úlenr   )r
   r   r   r   Ú__len__E   s    zCaseInsensitiveDict.__len__c             C   s
   t | jƒS )N)Úreprr   )r
   r   r   r   Ú__repr__H   s    zCaseInsensitiveDict.__repr__c             C   s
   t | jƒS )N)Ústrr   )r
   r   r   r   Ú__str__K   s    zCaseInsensitiveDict.__str__c             C   s
   | j  ¡ S )N)r   Úkeys)r
   r   r   r   r#   N   s    zCaseInsensitiveDict.keysc             C   s
   | j  ¡ S )N)r   Úvalues)r
   r   r   r   r$   Q   s    zCaseInsensitiveDict.valuesc             C   s
   | j  ¡ S )N)r   Úitems)r
   r   r   r   r%   T   s    zCaseInsensitiveDict.itemsc             C   sx   t |tjtfƒstS t |tƒrlt|  ¡ ƒt| ¡ ƒkr:dS x,|  ¡ D ] \}}||kr`|| |ksDdS qDW dS | t|ƒkS )NFT)Ú
isinstanceÚcollectionsÚMappingr   ÚNotImplementedr   r   r%   )r
   r   r   Úvaluer   r   r   Ú__eq__W   s    
zCaseInsensitiveDict.__eq__c             C   s
   t | jƒS )N)r   r   )r
   r   r   r   Úcopyf   s    zCaseInsensitiveDict.copy)N)Ú__name__Ú
__module__Ú__qualname__r   r   Ústaticmethodr   r   r   r   r   r   r    r"   r#   r$   r%   r+   r,   r   r   r   r   r      s   
r   c               @   sN   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚCaseInsensitiveWithAliasDictNc             K   s$   t ƒ | _t ƒ | _tj| |f|Ž d S )N)r   Ú_aliasesÚ_alias_keymapr   r   )r
   r   r   r   r   r   r   k   s    z%CaseInsensitiveWithAliasDict.__init__c             C   s
   | j  ¡ S )N)r2   r#   )r
   r   r   r   Úaliasesp   s    z$CaseInsensitiveWithAliasDict.aliasesc             C   sš   t |tƒrd|  |d ¡}|| jkrJt | |d |¡ |  ||dd … ¡ q–tdt|d d ƒ ƒ‚n2|  |¡}|| jkrˆt | ||¡ n|| | j| < d S )Nr   é   ú'z already used as alias)	r&   r   r   r2   r   r   Ú	set_aliasr   r!   )r
   r   r*   r   r   r   r   r   s   s    



z(CaseInsensitiveWithAliasDict.__setitem__c             C   sx   |   |¡}y@t | |¡ || jkrHx$| j| d d … D ]}|  |¡ q6W d S  tk
rr   || jkrn|  |¡ Y nX d S )N)r   r   r   r3   Úremove_aliasr   r2   )r
   r   r   Úaliasr   r   r   r   ‚   s    


z(CaseInsensitiveWithAliasDict.__delitem__c             C   s  t |tƒs|g}xú|D ]ò}|  |¡}|| jkrô|  |¡}|| jkrÈ|| jkrœ|| j|< || jkrx| j|  |  |¡¡ qÆtƒ | j|< | j|  |  |¡¡ qò||  | j| ¡kr²qòtdt	|ƒ d ƒ‚n*||  | j| ¡krÞntdt	|ƒ d ƒ‚qtdt	|ƒ d ƒ‚qW d S )Nr6   z' already used as aliasz' already used as keyz' is not an existing key)
r&   r   r   r   r2   r3   ÚappendÚlistr   r!   )r
   r   r9   Zalias_to_addr   Úci_aliasr   r   r   r7   Ž   s(    








z&CaseInsensitiveWithAliasDict.set_aliasc             C   sh   t |tƒs|g}xR|D ]J}|  |¡}| j| j|   |¡ | j| j|  sX| j| j| = | j|= qW d S )N)r&   r   r   r3   r2   Úremove)r
   r9   Zalias_to_remover<   r   r   r   r8   ª   s    


z)CaseInsensitiveWithAliasDict.remove_aliasc          
   C   s:   yt  | |¡S  tk
r4   t  | | j|  |¡ ¡S X d S )N)r   r   r   r2   r   )r
   r   r   r   r   r   ´   s    z(CaseInsensitiveWithAliasDict.__getitem__c             C   s"   t | jƒ}| j ¡ |_| j|_|S )N)r1   r   r2   r,   r3   )r
   Únewr   r   r   r,   º   s    
z!CaseInsensitiveWithAliasDict.copy)N)r-   r.   r/   r   r4   r   r   r7   r8   r   r,   r   r   r   r   r1   j   s   

r1   )Ú__doc__r'   Ú r   ÚMutableMappingr   r1   r   r   r   r   Ú<module>   s   L