
"·T`G
  ã               @   s8   d  Z  d e  f Z d d „  Z Gd d „  d e ƒ Z d S)Ú
no_replaceÚreplacec             G   s%   x | D] } | |  k r d Sq Wd 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   sy   | |  _  t |  _ x$ t D] } | | k r | |  _ Pq Wd | 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   s2   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                s‹   ‡  ‡ f d d †  } xo | j  ƒ  D]a \ } } | | k ry | d  k r_ ˆ j r_ | j | ƒ qƒ | | | | ƒ | | <q" | | | <q" W| S)Nc                s•   ˆ  r
 | St  | t t f ƒ r; ˆ j r; ˆ j j |  | ƒ St  | t ƒ rf ˆ j rf ˆ j j |  | ƒ St  | t ƒ r‘ ˆ j	 r‘ ˆ j j |  | ƒ S|  S)N)
Ú
isinstanceÚlistÚtupler   r	   ÚmergeÚstrr   Údictr   )Zold_vZnew_v)Ú
do_replacer   r   r   Úmerge_same_key+   s    z/Merger._do_dict_replace.<locals>.merge_same_key)Úitemsr   Úpop)r   ÚvalueÚ
merge_withr   r   r   Úvr   )r   r   r   Ú_do_dict_replace)   s    zMerger._do_dict_replacec             C   s„   t  | t ƒ s | S|  j d k r@ |  j t | ƒ | d ƒ } n@ |  j d k rm |  j 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_dictA   s    zMerger._on_dictN)Ú__name__Ú
__module__Ú__qualname__r   r   r#   r%   r   r   r   r   r      s   r   N)r
   r   r   Úobjectr   r   r   r   r   Ú<module>   s   