
    x[h                     j    d dl Z d dlmZmZ dZdZdZ G d d      Z G d d	e      Zd
 Z	d Z
d Zd Zy)    N)importer
type_utilszlist()+dict()+str()m_Mergerc                       e Zd Zd Zd Zy)UnknownMergerc                     |S N )self_meth_wantedvalue_merge_withs       </usr/lib/python3/dist-packages/cloudinit/mergers/__init__.py_handle_unknownzUnknownMerger._handle_unknown   s        c                     t        j                  |      }|j                         }d|z  }d }||g}t        | |      rt	        | |      }|s| j
                  }|j                  d|        || S )Nz_on_%sr   )r   obj_namelowerhasattrgetattrr   insert)r   source
merge_with	type_namemethod_namemethargss          r   mergezUnknownMerger.merge   ss    ''/	OO%	),
#4%4-D''DKK;'T{r   N)__name__
__module____qualname__r   r   r   r   r   r   r      s    r   r   c                        e Zd ZddZd Zd Zy)LookupMergerNc                 P    t         j                  |        |g | _        y || _        y r
   )r   __init___lookups)r   lookupss     r   r&   zLookupMerger.__init__-   s#    t$?DM#DMr   c                 2    dt        | j                        z  S )NzLookupMerger: (%s))lenr'   )r   s    r   __str__zLookupMerger.__str__4   s    #s4=='9::r   c                     d }| j                   D ]  }t        ||      st        ||      } n |st        j	                  | |||      S  |||      S r
   )r'   r   r   r   r   )r   meth_wantedr   r   r   mergers         r   r   zLookupMerger._handle_unknown<   se    mm 	Fv{+ v{3	  00k5*  E:&&r   r
   )r    r!   r"   r&   r+   r   r   r   r   r$   r$   ,   s    $;'r   r$   c                 z   g }| j                  dd       }|| j                  dd       }||S t        |t              rt        |      S |D ]n  }t        |t              r+|d   }|j                  dd      j                         }|d   }n|d   }t        |      dk\  r|d	d  }ng }|s\|j                  ||f       p |S )
N	merge_how
merge_typename-_settingsr         )	pop
isinstancestrstring_extract_mergersdictreplacestripr*   append)configparsed_mergersraw_mergersmr2   optss         r   dict_extract_mergersrE   K   s    N**[$/Kjjt4+s#%k22 0a$ V9D<<S)//1DZ=DQ4D1v{u!!4,/0 r   c                    g }| j                  d      D ]  }|j                         j                         }|j                  dd      }|s6t	        j
                  d|      }|sd|z  }t        |      |j                         \  }}|j                         j                  d      }|D cg c]1  }|j                         s|j                         j                         3 }}|j                  ||f        |S c c}w )N+r3   r4   z#(^[a-zA-Z_][A-Za-z0-9_]*)\((.*?)\)$z2Matcher identifier '%s' is not in the right format,)	splitr   r>   r=   rematch
ValueErrorgroupsr?   )r0   rA   m_namerK   msgm_opsrC   s          r   r;   r;   d   s    N//#& / %%'S)?HFC S/!,,.##C(,1?qQWWY"??vuo.!/"  @s   (C7> C7c                  2    t        t        t                    S r
   )tupler;   DEF_MERGE_TYPEr   r   r   default_mergersrT   z   s    '788r   c                    g }| D ]  \  }}|j                  t              st        t        |      z   }t        j                  |t
        gt        g      \  }}|sd|dt        d|d}t        |      t        j                  |d         }t        |t              }|j                  ||f        g }	t        |	      }
|D ]  \  }}|	j                   ||
|              |
S )Nz$Could not find merger module named 'z' with attribute 'z' (searched )r   )
startswithMERGER_PREFIXr:   r   find_moduler    MERGER_ATTRImportErrorimport_moduler   r?   r$   )rA   mergers_to_berN   rP   merger_locslooked_locsrO   modmod_attrmergersrootattrrD   s                r   	constructre   ~   s    M' 4  /"S[0F#+#7#7XJ$
 [  ;5 
 c""((Q8CsK0H  (E!23!4$ G D# )
dtD$'()Kr   )rJ   	cloudinitr   r   rS   rX   rZ   r   r$   rE   r;   rT   re   r   r   r   <module>rg      sF    
 *& 8'= '>2,9r   