
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\me	                 @   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 j| S )N)	importlibimport_module)r    r
   /usr/lib/python3.6/importer.pyr	      s    r	   )r   attrsr   c             C   s:   d}|s|S t j| }x|D ]}t||r|d7 }qW |S )Nr      )r   r	   hasattr)r   r   Zfound_attrsmodattrr
   r
   r   _count_attrs   s    


r   )mod_namer   c             C   s   d| j  kr| dd } | jds,d|  } i }tjjd}|r|jrx|jD ]}|jtj| qNW x$|j D ]}|j  | j  krp|S qpW | S )zECheck the importable datasource modules for a case-insensitive match.znocloud-netN   Z
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   sn   |sg }g }g }xT|D ]L}dj td|| g}|j| tjj|sFqt||t|kr|j| qW ||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   Ztypingr   r   Z	cloudinitr   strr	   intr   r   tupler*   r
   r
   r
   r   <module>   s   