a '¡Dgµ ã@s–ddlZddlmZddlmZmZddlmZeedœdd„Z deeeee dœd d „Z eeed œd d „Z deeeeeee dœdd„ZdS)éN)Ú ModuleType)ÚOptionalÚSequence)Úutil)Ú module_nameÚreturncCs t |¡S)N)Ú importlibÚ import_module)r©r ú6/usr/lib/python3.9/site-packages/cloudinit/importer.pyr sr )rÚattrsrcCs6d}|s |St |¡}|D]}t||ƒr|d7}q|S)Nré)rr Úhasattr)rr Z found_attrsÚmodÚattrr r r Ú _count_attrss   r)Úmod_namercCsŒd| ¡kr|dd…}| d¡s,d|›}i}tj d¡}|rˆ|jrˆ|jD]}| t |¡¡qL| ¡D]}| ¡| ¡krj|Sqj|S)zECheck the importable datasource modules for a case-insensitive match.z nocloud-netNéüÿÿÿZ DataSourcezcloudinit.sources) ÚlowerÚ startswithrrÚ find_specÚsubmodule_search_locationsÚupdateZget_modules_from_dirÚvalues)rÚmodulesÚspecÚdirÚmoduler r r Ú"match_case_insensitive_module_name#s         r)Ú base_nameÚ search_pathsÚrequired_attrsrcCsj|sg}g}g}|D]L}d td||gƒ¡}| |¡tj |¡sDqt||ƒt|ƒkr| |¡q||fS)zFinds specified modulesÚ.N)ÚjoinÚfilterÚappendrrrrÚlen)rr r!Z lookup_pathsZ found_pathsÚpathÚ full_pathr r r Ú find_module7s   r))N)N)rÚtypesrÚtypingrrZ cloudinitrÚstrr ÚintrrÚtupler)r r r r Ú s"  ÿ þ ý ü