
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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rŒx|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   