o
    x[hµ	  ã                	   @   s¨   d dl Z d dlmZ d dlmZmZ d dlmZ dedefdd„Z		dded	eee  de
fd
d„Zdedee fdd„Z	ddedee deee  def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
   Úattrsc                 C   s6   d}|s|S t  | ¡}|D ]}t||ƒr|d7 }q|S )Nr   é   )r	   r
   Úhasattr)r   r   Úfound_attrsÚmodÚattrr   r   r   Ú_count_attrs   s   

€r   Úmod_namec                 C   sŒ   d|   ¡ kr| dd… } |  d¡sd| › �} i }tj d¡}|rD|jrD|jD ]
}| t |¡¡ q&| ¡ D ]}|  ¡ |   ¡ krC|  S q5| S )zECheck the importable datasource modules for a case-insensitive match.znocloud-netNéüÿÿÿÚ
DataSourcezcloudinit.sources)	ÚlowerÚ
startswithr	   r   Ú	find_specÚsubmodule_search_locationsÚupdateÚget_modules_from_dirÚvalues)r   ÚmodulesÚspecÚdirÚmoduler   r   r   Ú"match_case_insensitive_module_name#   s   



ÿr"   Ú	base_nameÚsearch_pathsÚrequired_attrsc                 C   sj   |sg }g }g }|D ]&}d  td|| gƒ¡}| |¡ tj |¡s"q
t||ƒt|ƒkr0| |¡ q
||fS )zFinds specified modulesÚ.N)ÚjoinÚfilterÚappendr	   r   r   r   Úlen)r#   r$   r%   Úlookup_pathsÚfound_pathsÚpathÚ	full_pathr   r   r   Úfind_module7   s   

€r/   r   )r	   Útypesr   Útypingr   r   Ú	cloudinitr   Ústrr
   Úintr   r"   Útupler/   r   r   r   r   Ú<module>   s0   
ÿÿ
ÿ
þýÿþ
ýü