o x[h @sddlZddlmZddlmZmZddlmZdedefddZ dded eeede fd d Z d edeefd dZ ddedeedeeede fddZdS)N) ModuleType)OptionalSequence)util module_namereturncCs t|SN) importlib import_module)rr 4/usr/lib/python3/dist-packages/cloudinit/importer.pyr s r attrscCs6d}|s|St|}|D] }t||r|d7}q |S)Nr)r r hasattr)rr found_attrsmodattrr r r _count_attrss  rmod_namecCsd|kr |dd}|dsd|}i}tjd}|rD|jrD|jD] }|t|q&|D]}||krC|Sq5|S)zECheck the importable datasource modules for a case-insensitive match.z nocloud-netN DataSourcezcloudinit.sources) lower startswithr r find_specsubmodule_search_locationsupdateget_modules_from_dirvalues)rmodulesspecdirmoduler r r "match_case_insensitive_module_name#s        r" base_name search_pathsrequired_attrscCsj|sg}g}g}|D]&}dtd||g}||tj|s"q t||t|kr0||q ||fS)zFinds specified modules.N)joinfilterappendr rrrlen)r#r$r% lookup_paths found_pathspath full_pathr r r find_module7s   r/r)r typesrtypingrr cloudinitrstrr intrr"tupler/r r r r s0