a
    %@c                     @   sL   d dl mZ d dlmZ d dlmZ dddZdddZG d	d
 d
eZdS )    )	iteritems)
to_unicode)OrderedDictNc                    sV   dd t |pg D   fdd| D } fdd| D }t| fdddt| S )	zSorts leading keys according to canonical_order.  Keys not specified in
    canonical_order will appear alphabetically at the end.
    c                 S   s   i | ]\}}||qS  r   ).0ikr   r   Y/var/www/dev/btcams2022/python_venv/lib/python3.9/site-packages/icalendar/caselessdict.py
<dictcomp>       z"canonsort_keys.<locals>.<dictcomp>c                    s   g | ]}| v r|qS r   r   r   r   Zcanonical_mapr   r	   
<listcomp>   r   z"canonsort_keys.<locals>.<listcomp>c                    s   g | ]}| vr|qS r   r   r   r   r   r	   r      r   c                    s    |  S Nr   )r   r   r   r	   <lambda>   r   z canonsort_keys.<locals>.<lambda>)key)	enumeratesorted)keyscanonical_orderheadtailr   r   r	   canonsort_keys   s    r   c                    s    fddt   |D S )zCReturns a list of items from dict1, sorted by canonical_order.
    c                    s   g | ]}| | fqS r   r   r   dict1r   r	   r      r   z#canonsort_items.<locals>.<listcomp>)r   r   )r   r   r   r   r	   canonsort_items   s    
r   c                       s   e Zd ZdZ fddZ fddZ fddZ fdd	Z fd
dZd# fdd	Z	d$ fdd	Z
d% fdd	Z fddZ fddZdd Z fddZdd Zdd ZdZdd  Zd!d" Z  ZS )&CaselessDictziA dictionary that isn't case sensitive, and only uses strings as keys.
    Values retain their case.
    c                    sX   t t| j|i | |  D ]4\}}t| }||krt t| | || |< qdS )z,Set keys to upper for initial dict.
        N)superr   __init__itemsr   upper__delitem__)selfargskwargsr   valueZ	key_upper	__class__r   r	   r      s    zCaselessDict.__init__c                    s   t |}tt| | S r   )r   r   r   __getitem__r    r"   r   r&   r   r	   r(   (   s    zCaselessDict.__getitem__c                    s"   t |}tt| | | d S r   )r   r   r   __setitem__r    r"   r   r%   r&   r   r	   r*   ,   s    zCaselessDict.__setitem__c                    s    t |}tt| |  d S r   )r   r   r   r!   r    r)   r&   r   r	   r!   0   s    zCaselessDict.__delitem__c                    s   t |}tt| | S r   r   r   r   __contains__r    r)   r&   r   r	   r-   4   s    zCaselessDict.__contains__Nc                    s   t |}tt| | |S r   )r   r   r   getr    r"   r   defaultr&   r   r	   r.   8   s    zCaselessDict.getc                    s   t |}tt| | |S r   )r   r   r   
setdefaultr    r+   r&   r   r	   r1   <   s    zCaselessDict.setdefaultc                    s   t |}tt| | |S r   )r   r   r   popr    r/   r&   r   r	   r2   @   s    zCaselessDict.popc                    s   t t|  S r   )r   r   popitemr"   r&   r   r	   r3   D   s    zCaselessDict.popitemc                    s   t |}tt| | S r   r,   r)   r&   r   r	   has_keyG   s    zCaselessDict.has_keyc                 O   sD   t ||g }|D ],}t|dr(t|}|D ]\}}|| |< q,qd S )Nr   )listhasattrr   )r"   r#   r$   Zmappingsmappingr   r%   r   r   r	   updateK   s    
zCaselessDict.updatec                    s   t | tt|  S r   )typer   r   copyr4   r&   r   r	   r;   T   s    zCaselessDict.copyc                 C   s   dt | jt| f S )Nz%s(%s))r:   __name__dictr4   r   r   r	   __repr__W   s    zCaselessDict.__repr__c                 C   s    | |u pt |  t | kS r   )r=   r   )r"   otherr   r   r	   __eq__Z   s    zCaselessDict.__eq__c                 C   s   t |  | jS )zSorts keys according to the canonical_order for the derived class.
        Keys not specified in canonical_order will appear at the end.
        )r   r   r   r4   r   r   r	   sorted_keysa   s    zCaselessDict.sorted_keysc                 C   s   t | | jS )zSorts items according to the canonical_order for the derived class.
        Items not specified in canonical_order will appear at the end.
        )r   r   r4   r   r   r	   sorted_itemsg   s    zCaselessDict.sorted_items)N)N)N)r<   
__module____qualname____doc__r   r(   r*   r!   r-   r.   r1   r2   r3   r5   r9   r;   r>   r@   r   rA   rB   __classcell__r   r   r&   r	   r      s$   
	r   )N)N)	Zicalendar.compatr   Zicalendar.parser_toolsr   collectionsr   r   r   r   r   r   r   r	   <module>   s
   


