o
    i                     @   sf   d dl Z d dlmZm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list()+dict()+str()m_Mergerc                   @   s   e Zd Zdd Zdd ZdS )UnknownMergerc                 C   s   |S N )self_meth_wantedvalue_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| |}|s(| j}|d| || S )Nz_on_%sr   )r   obj_namelowerhasattrgetattrr   insert)r	   source
merge_with	type_name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 u rg | _d S || _d S r   )r   __init___lookups)r	   lookupsr   r   r   r   -   s   


zLookupMerger.__init__c                 C   s   dt | j S )NzLookupMerger: (%s))lenr    )r	   r   r   r   __str__4   s   zLookupMerger.__str__c                 C   sF   d }| j D ]}t||rt||} nq|st| |||S |||S r   )r    r   r   r   r   )r	   meth_wantedr   r   r   mergerr   r   r   r   <   s   



zLookupMerger._handle_unknownr   )r   r   r   r   r#   r   r   r   r   r   r   ,   s    
r   c                 C   s   g }|  dd }|d u r|  dd }|d u r|S t|tr!t|S |D ]4}t|tr;|d }|dd }|d }n|d }t|dkrL|d	d  }ng }|rW|||f q#|S )
N	merge_how
merge_typename-_settingsr         )	pop
isinstancestrstring_extract_mergersdictreplacestripr"   append)configparsed_mergersraw_mergersmr(   optsr   r   r   dict_extract_mergersK   s*   


r;   c                 C   s   g }|  dD ]<}|  }|dd}|sqtd|}|s(d| }t|| \}}|  d}dd |D }|||f q|S )	N+r)   r*   z#(^[a-zA-Z_][A-Za-z0-9_]*)\((.*?)\)$z2Matcher identifier '%s' is not in the right format,c                 S   s    g | ]}|  r|   qS r   )r4   r   ).0r9   r   r   r   
<listcomp>u   s     z*string_extract_mergers.<locals>.<listcomp>)	splitr   r4   r3   rematch
ValueErrorgroupsr5   )r&   r7   m_namerB   msgm_opsr   r   r   r1   d   s"   r1   c                   C   s   t ttS r   )tupler1   DEF_MERGE_TYPEr   r   r   r   default_mergersz   s   rJ   c                 C   s   g }| D ]:\}}| tstt| }t|tgtg\}}|s+d|t|f }t|t|d }t	|t}|
||f qg }	t|	}
|D ]\}}|	
||
| qG|
S )NzICould not find merger module named '%s' with attribute '%s' (searched %s)r   )
startswithMERGER_PREFIXr0   r   find_moduler   MERGER_ATTRImportErrorimport_moduler   r5   r   )r7   mergers_to_berE   rG   merger_locslooked_locsrF   modmod_attrmergersrootattrr:   r   r   r   	construct~   s*   


rY   )rA   	cloudinitr   r   rI   rL   rN   r   r   r;   r1   rJ   rY   r   r   r   r   <module>   s   