
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\me                 @   sp   d dl Z d dlmZmZ e j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.6/__init__.py_handle_unknown   s    zUnknownMerger._handle_unknownc             C   sX   t j|}|j }d| }d }||g}t| |r:t| |}|sP| j}|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 j|  |d krg | _n|| _d S )N)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   sH   d }x$| j D ]}t||rt||}P qW |s>tj| |||S |||S )N)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 }| j dd }|d kr$| j dd }|d kr0|S t|trBt|S xp|D ]h}t|trx|d }|jddj }|d }n&|d }t|dkr|d	d  }ng }|rH|j||f qHW |S )
N	merge_howZ
merge_typename-_Zsettingsr         )	pop
isinstancestrstring_extract_mergersdictreplacestripr   append)configparsed_mergersZraw_mergersmr   optsr   r   r   dict_extract_mergersM   s(    



r-   c             C   s   g }x| j dD ]v}|j j }|jdd}|s2qtj|}|sPd| }t||j \}}|j j d}dd |D }|j||f qW |S )N+r   r   z1Matcher identifer '%s' is not in the right format,c             S   s    g | ]}|j  r|j  j 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 )N)tupler$   DEF_MERGE_TYPEr   r   r   r   default_mergers|   s    r<   c             C   s   g }x~| D ]v\}}|j ts(tt| }tj|tgtg\}}|sZd|t|f }t|q
tj|d }t	|t}|j
||f q
W g }	t|	}
x |D ]\}}|	j
||
| qW |
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   
