B
    5d                 @   s>   d Z ddlmZ ddlZddlmZ dgZG dd deZdS )z9
A subclass of MutableAttr that has defaultdict support.
    )MappingN)MutableAttrAttrDefaultc               @   s~   e Zd ZdZddedf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edd ZdS )r   zC
    An implementation of MutableAttr with defaultdict support
    NFc             C   s`   |d kri }nt |ts t|}| d| | d| | d| | d| | dd d S )N_default_factory_mapping_sequence_type	_pass_key_allow_invalid_attributesF)
isinstancer   dict_setattr)selfdefault_factoryitemssequence_typepass_key r   4/tmp/pip-unpacked-wheel-akj3st3j/attrdict/default.py__init__   s    
zAttrDefault.__init__c             C   s   | j | j| jfS )z>
        The configuration for a AttrDefault instance
        )r   r   r   )r   r   r   r   _configuration   s    zAttrDefault._configurationc             C   s4   || j kr| j | S | jdk	r(| |S t|dS )z
        Access a value associated with a key.

        Note: values returned will not be wrapped, even if recursive
        is True.
        N)r   r   __missing__KeyError)r   keyr   r   r   __getitem__%   s
    



zAttrDefault.__getitem__c             C   s   || j |< dS )z7
        Add a key-value pair to the instance.
        N)r   )r   r   valuer   r   r   __setitem__3   s    zAttrDefault.__setitem__c             C   s   | j |= dS )z)
        Delete a key-value pair
        N)r   )r   r   r   r   r   __delitem__9   s    zAttrDefault.__delitem__c             C   s
   t | jS )z2
        Check the length of the mapping.
        )lenr   )r   r   r   r   __len__?   s    zAttrDefault.__len__c             C   s
   t | jS )z,
        Iterated through the keys.
        )iterr   )r   r   r   r   __iter__E   s    zAttrDefault.__iter__c             C   s.   | j r| | | |< }n|   | |< }|S )z(
        Add a missing element.
        )r   r   )r   r   r   r   r   r   r   K   s    zAttrDefault.__missing__c             C   s(   t djt| jt| jt| jdS )z?
        Return a string representation of the object.
        z5AttrDefault({default_factory}, {pass_key}, {mapping}))r   r   mapping)sixuformatreprr   r   r   )r   r   r   r   __repr__V   s
    zAttrDefault.__repr__c             C   s   | j | j| j| j| jfS )z'
        Serialize the object.
        )r   r   r   r   r	   )r   r   r   r   __getstate__b   s
    zAttrDefault.__getstate__c             C   sN   |\}}}}}|  d| |  d| |  d| |  d| |  d| dS )z)
        Deserialize the object.
        r   r   r   r   r	   N)r   )r   stater   r!   r   r   Zallow_invalid_attributesr   r   r   __setstate__n   s    zAttrDefault.__setstate__c             C   s   |\}}}| ||||dS )z-
        A standardized constructor.
        )r   r   r   )clsr!   configurationr   r   r   r   r   r   _constructor{   s    
zAttrDefault._constructor)__name__
__module____qualname____doc__tupler   r   r   r   r   r   r    r   r&   r'   r)   classmethodr,   r   r   r   r   r      s   )r0   collectionsr   r"   Zattrdict.mixinsr   __all__r   r   r   r   r   <module>   s
   