o
    )<Id                     @   s   d dl Z d dlZd dlZzd dlmZ W n ey#   d dlmZ Y nw dZdd Zi i dfdd	Z	d
e
de
fddZdd ZdS )    N)CSafeLoader)
SafeLoaders   __recursion_marker__c              
   C   s|   z	t | d }W n ty } ztd| |d}~ww z
tj|td}W |S  tjy= } ztd| |d}~ww )z*Convert a YAML file into a data structure.rbzfile '{}' could not be readN)LoaderzSyntax error in yaml file '{}')	openreadIOError	Exceptionformatyamlloadr   	YAMLError)pathbedata r   `/home/thorsten/Data/Arbeit/PerFact/Git/ema-modules/Ansible/inventory/../module_utils/load_dir.pyload_yaml_file   s   r   Fc                 C   s  i }g }g }t | D ]}|drq|dr|| q|| qd|v r;t j| d}t|p4i }	i ||	}d|v rut j| d}|}
i }tt	|
 | |
 D ]\}}|dkr`qW||v rp|| }t||||< qW|||< qW|D ]F}t j| |}t j|rt|||d}	d|	t< n't j|dkri }	nt|pi }	i t||	}	d	|v r|d	 ||	\}}	|	||< qw|rt d
 |}|S )zLoads YAML objects from files in a given directory into a dict by
    filename. Directories are loaded recursively. File names beginning with two
    underscores are contain meta information.z.swp__
__defaults__transforms__builtins__)defaults
transformsTr   on_loadflatten)oslistdirendswith
startswithappendr   joinr   execr   r   itemsmerge_transformsisdirload_dirrecursion_markergetsizecopydeepcopyglobals)	directoryr   r   r   entriesfilesmetanamefr   parent_transformspttr   r   r   r'      sP   




r'   r   returnc                 C   s   i }|   D ]7\}}t|vr||v rtd||||< q|t= t|}|  D ]\}}||v r8td||||< q)q|S )Nzname '{}' used more than once)r$   r(   r	   r
   r   )r   resultkeyvaluer1   
definitionr   r   r   r   c   s   
r   c                    s    fdd}|S )Nc                    s    | |\} }| |S )Nr   )filenamer   t1t2r   r   new_t{   s   
zmerge_transforms.<locals>.new_tr   )r=   r>   r?   r   r<   r   r%   z   s   r%   )r*   r   r   r   r   ImportErrorr   r(   r   r'   dictr   r%   r   r   r   r   <module>   s    F