U
    L¬÷d”
  ã                   @   s&   d Z de fZdd„ ZG dd„ dƒZdS )Ú
no_replaceÚreplacec                 G   s   |D ]}|| kr dS qdS )NTF© )ZwhatÚkeysÚkr   r   ú:/usr/lib/python3/dist-packages/cloudinit/mergers/m_dict.pyÚ_has_any   s    r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMergerc                 C   sT   || _ t| _tD ]}||kr|| _ q(qd|k| _t|ddƒ| _d|k| _d| _d S )NZrecurse_strZrecurse_arrayZrecurse_listZallow_deleteT)	Ú_mergerÚDEF_MERGE_TYPEÚ_methodÚMERGE_TYPESÚ_recurse_strr   Ú_recurse_arrayÚ_allow_deleteÚ_recurse_dict)ÚselfZmergerZoptsÚmr   r   r   Ú__init__   s    

zMerger.__init__c                 C   s$   d}|| j | j| j| j| jf }|S )NzWDictMerger: (method=%s,recurse_str=%s,recurse_dict=%s,recurse_array=%s,allow_delete=%s))r   r   r   r   r   )r   Úsr   r   r   Ú__str__%   s    ÿûzMerger.__str__c                    sb   ‡ ‡fdd„}|  ¡ D ]F\}}||krT|d kr@ˆjr@| |¡ q\||| |ƒ||< q|||< q|S )Nc                    sj   ˆ r|S t |ttfƒr*ˆjr*ˆj | |¡S t |tƒrHˆjrHˆj | |¡S t |tƒrfˆj	rfˆj | |¡S | S )N)
Ú
isinstanceÚlistÚtupler   r	   ÚmergeÚstrr   Údictr   )Zold_vZnew_v©Ú
do_replacer   r   r   Úmerge_same_key4   s    z/Merger._do_dict_replace.<locals>.merge_same_key)Úitemsr   Úpop)r   ÚvalueÚ
merge_withr   r   r   Úvr   r   r   Ú_do_dict_replace3   s    
zMerger._do_dict_replacec                 C   s\   t |tƒs|S | jdkr,|  t|ƒ|d¡}n,| jdkrJ|  t|ƒ|d¡}ntd| j ƒ‚|S )Nr   Tr   FzUnknown merge type %s)r   r   r   r$   ÚNotImplementedError)r   r!   r"   Zmergedr   r   r   Ú_on_dictJ   s    


zMerger._on_dictN)Ú__name__Ú
__module__Ú__qualname__r   r   r$   r&   r   r   r   r   r      s   r   N)r
   r   r   r   r   r   r   r   Ú<module>   s
   þ