U
    Ӈg	                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZ eedddZ	deeee  e
dd	d
Zeee dddZdeee eee  edddZdS )    N)
ModuleType)OptionalSequence)util)module_namereturnc                 C   s
   t | S )N)	importlibimport_module)r    r
   4/usr/lib/python3/dist-packages/cloudinit/importer.pyr	      s    r	   )r   attrsr   c                 C   s6   d}|s|S t | }|D ]}t||r|d7 }q|S )Nr      )r   r	   hasattr)r   r   Zfound_attrsmodattrr
   r
   r   _count_attrs   s    


r   )mod_namer   c                 C   s   d|   kr| dd } | ds,d|  } i }tjd}|r|jr|jD ]}|t| qL| D ]}|  |   krj|  S qj| S )zECheck the importable datasource modules for a case-insensitive match.znocloud-netNZ
DataSourcezcloudinit.sources)	lower
startswithr   r   	find_specsubmodule_search_locationsupdateZget_modules_from_dirvalues)r   modulesspecdirmoduler
   r
   r   "match_case_insensitive_module_name#   s    




r   )	base_namesearch_pathsrequired_attrsr   c                 C   sj   |sg }g }g }|D ]L}d td|| g}|| tj|sDqt||t|kr|| q||fS )zFinds specified modules.N)joinfilterappendr   r   r   r   len)r   r    r!   Zlookup_pathsZfound_pathspath	full_pathr
   r
   r   find_module7   s    
r)   )N)N)r   typesr   typingr   r   Z	cloudinitr   strr	   intr   r   tupler)   r
   r
   r
   r   <module>   s$     
 
