o
    f	                  	   @   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   



