o
    ¦®ØfŸ  ã                   @   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()Ú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__6   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_mergersM   s*   


€r;   c                 C   sŠ   g }|   d¡D ];}| ¡  ¡ }| dd¡}|sqt |¡}|s'd| }t|ƒ‚| ¡ \}}| ¡   d¡}dd„ |D ƒ}| ||f¡ q|S )Nú+r)   r*   z2Matcher identifier '%s' is not in the right formatú,c                 S   s    g | ]}|  ¡ r|  ¡  ¡ ‘qS r   )r4   r   )Ú.0r9   r   r   r   Ú
<listcomp>w   s     z*string_extract_mergers.<locals>.<listcomp>)	Úsplitr   r4   r3   Ú	NAME_MTCHÚmatchÚ
ValueErrorÚgroupsr5   )r&   r7   Úm_namerB   ÚmsgÚm_opsr   r   r   r1   f   s"   
ÿr1   c                   C   s   t ttƒƒS r   )Útupler1   ÚDEF_MERGE_TYPEr   r   r   r   Údefault_mergers|   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   )ÚreÚ	cloudinitr   r   ÚcompilerA   rI   rL   rN   r   r   r;   r1   rJ   rY   r   r   r   r   Ú<module>   s   
