U
    Ld                     @   sp   d dl Z d dlmZmZ e dZdZdZdZG dd dZ	G d	d
 d
e	Z
dd Zdd Zdd Zdd ZdS )    N)importer
type_utilsz#(^[a-zA-Z_][A-Za-z0-9_]*)\((.*?)\)$zlist()+dict()+str()Zm_ZMergerc                   @   s   e Zd Zdd Zdd ZdS )UnknownMergerc                 C   s   |S N )selfZ_meth_wantedvalueZ_merge_withr   r   </usr/lib/python3/dist-packages/cloudinit/mergers/__init__.py_handle_unknown   s    zUnknownMerger._handle_unknownc                 C   sX   t |}| }d| }d }||g}t| |r:t| |}|sP| j}|d| || S )Nz_on_%sr   )r   Zobj_namelowerhasattrgetattrr
   insert)r   source
merge_withZ	type_nameZmethod_namemethargsr   r   r	   merge    s    


zUnknownMerger.mergeN)__name__
__module____qualname__r
   r   r   r   r   r	   r      s   
r   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	LookupMergerNc                 C   s$   t |  |d krg | _n|| _d S r   )r   __init___lookups)r   Zlookupsr   r   r	   r   /   s    
zLookupMerger.__init__c                 C   s   dt | j S )NzLookupMerger: (%s))lenr   )r   r   r   r	   __str__6   s    zLookupMerger.__str__c                 C   sF   d }| j D ]}t||r
t||} q(q
|s<t| |||S |||S r   )r   r   r   r   r
   )r   Zmeth_wantedr   r   r   Zmergerr   r   r	   r
   >   s    


   zLookupMerger._handle_unknown)N)r   r   r   r   r   r
   r   r   r   r	   r   .   s   
r   c                 C   s   g }|  dd }|d kr$|  dd }|d kr0|S t|trBt|S |D ]h}t|trv|d }|dd }|d }n&|d }t|dkr|d	d  }ng }|rF|||f qF|S )
N	merge_howZ
merge_typename-_Zsettingsr         )	pop
isinstancestrstring_extract_mergersdictreplacestripr   append)Zconfigparsed_mergersZraw_mergersmr   optsr   r   r	   dict_extract_mergersM   s(    


r-   c                 C   s   g }|  dD ]v}|  }|dd}|s0qt|}|sNd| }t|| \}}|  d}dd |D }|||f q|S )N+r   r   z1Matcher identifer '%s' is not in the right format,c                 S   s    g | ]}|  r|   qS r   )r(   r   ).0r+   r   r   r	   
<listcomp>w   s      z*string_extract_mergers.<locals>.<listcomp>)	splitr   r(   r'   	NAME_MTCHmatch
ValueErrorgroupsr)   )r   r*   m_namer4   msgm_opsr   r   r	   r%   f   s"    
r%   c                   C   s   t ttS r   )tupler%   DEF_MERGE_TYPEr   r   r   r	   default_mergers|   s    r<   c                 C   s   g }| D ]v\}}| ts&tt| }t|tgtg\}}|sXd|t|f }t|qt|d }t	|t}|
||f qg }	t|	}
|D ]\}}|	
||
| q|
S )NzICould not find merger module named '%s' with attribute '%s' (searched %s)r   )
startswithMERGER_PREFIXr$   r   find_moduler   MERGER_ATTRImportErrorimport_moduler   r)   r   )r*   Zmergers_to_ber7   r9   Zmerger_locsZlooked_locsr8   modZmod_attrZmergersrootattrr,   r   r   r	   	construct   s.    
  

rF   )reZ	cloudinitr   r   compiler3   r;   r>   r@   r   r   r-   r%   r<   rF   r   r   r   r	   <module>   s   
