3
\me @ s d dl Z d dlmZ d dlmZmZ d dlmZ eedddZ deeee e
dd d
Zeee ddd
Zdeee eee e
dddZdS ) N)
ModuleType)OptionalSequence)util)module_namereturnc 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|d7 }qW |S )Nr )r r hasattr)r r Zfound_attrsmodattrr
r
r _count_attrs s
r )mod_namer c C s d| j kr| dd } | jds,d| } i }tjjd}|r|jrx|jD ]}|jtj| qNW x$|j D ]}|j | j krp|S qpW | S )zECheck the importable datasource modules for a case-insensitive match.znocloud-netN Z
DataSourcezcloudinit.sources) lower
startswithr r find_specsubmodule_search_locationsupdateZget_modules_from_dirvalues)r modulesspecdirmoduler
r
r "match_case_insensitive_module_name# s
r ) base_namesearch_pathsrequired_attrsr c C sn |sg }g }g }xT|D ]L}dj td|| g}|j| tjj|sFqt||t|kr|j| qW ||fS )zFinds specified modules.N)joinfilterappendr r r r len)r r! r" Zlookup_pathsZfound_pathspath full_pathr
r
r find_module7 s
r* )N)N)r typesr Ztypingr r Z cloudinitr strr intr r tupler* r
r
r
r